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__)