首页 > 编程语言 > 详细

python中的描述符

时间:2018-08-18 19:24:45      阅读:194      评论:0      收藏:0      [点我收藏+]
描述符:含有__set__,__get__,__delete__中的一个或者多个的新式类。
描述顾名思义,是描述别的类中的属性
优先级:类属性》数据描述符》实例属性》非数据描述符 (含有__set__与__get__是数据描述符)

作用: 因为python语言比较自由,比如c++中 int x = 1;可是这里Python x=1就可以,很自由
有代理作用,类型检测,等等作用

技术分享图片
 1 class miaoshufu:
 2     def __init__(self, k, expect_type):  # k是要描述的属性
 3         self.k = k
 4         self.type = expect_type
 5 
 6     def __set__(self, instance, value):  # instance 是实例本身,value是初始化的赋值 ,  owner是拥有它的类
 7         print("---------------set方法")
 8         if type(value) is self.type:
 9             print(instance)
10             print(value)
11             instance.__dict__[self.k] = value  # 将这个value这个值真的设置到instance即p这个实例中。这里只能重底层__dict__设置
12         else:
13             return print("%s 传入的类型错误" %value) # 用return终止赋值
14             # raise TypeError
15 
16     def __get__(self, instance, owner):  # 这里必须有set,不然优先级靠后,实例前不能检测
17         print("-------------------get方法")
18         print(instance)
19         print(owner)
20         return instance.__dict__[self.k]
21 
22     def __delete__(self, instance):
23         print("-------del")
24         instance.__dict__.pop(self.k)
25 
26 
27 class People(object):
28     name = miaoshufu(name, str)          # 类中name这个属性被上面的描述符描述
29 
30     def __init__(self, name, age, salary):
31         self.name = name
32         self.age = age
33         self.salary = salary
34 
35 
36 if __name__ == __main__:
37     p = People(wan, 24, 1)          # 触发描述符中的__set__
38 
39     p.name = li                     # 触发描述符中的__set__
40     del p.name
41     print(p.__dict__)
View Code

 

python中的描述符

原文:https://www.cnblogs.com/maxiaonong/p/9498103.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!