# 描述符,相当于一个代理
class Str:
def __init__(self,name):
self.name = name
# 取值操作时使用
# instance:传入对象
# owner:对象的类
def __get__(self, instance, owner):
print("get--->",instance,owner)
# 返回对象的name属性
return instance.__dict__[self.name]
# 赋值操作时使用
def __set__(self, instance, value):
print("set-->",instance,value)
# 设置属性
instance.__dict__[self.name] = value
# 删除操作时使用
def __delete__(self, instance):
print("delete——--》",instance)
instance.__dict__.pop(self.name)
class People:
name=Str('name')
print(name)
def __init__(self,name,age,salary):
self.name=name
print(self.name)
self.age=age
self.salary=salary
p1 = People('wangconng',21,-1000)
# 调用
print(p1.__dict__)
p1.name
# 赋值
print(p1.__dict__)
p1.name = 'cong'
print(p1.__dict__)
#删除
print(p1.__dict__)
del p1.name
print(p1.__dict__)
# 描述符分为两种
# 数据描述符:至少实现了__set__(),__get__()
# 非数据描述符:没有实现__set__()
# 类操作属性>数据描述符
# 数据描述符 > 对象操作属性
# 对象描述符 > 非数据属性
# 非数据属性 > 找不到