描述符的定义
描述符本质就是新式类,在这个新式类中,至少实现了__get__()、set()、delete()中的一个,这也被称为描述符协议
_ get_():调用一个属性时触发
_ set_():为一个属性赋值时触发
_ delete_():采用del删除属性时触发
描述符作用
定义一个描述符:
class Foo:
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
pass
def __delete__(self, instance):
pass
描述符的作用:代理另外一个类的属性(必须将描述符定义成这个类的类属性,不能定义到__init__()方法中)
描述符产生的实例进行属性操作并不会触发三个方法的执行
class Foo:
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
pass
def __delete__(self, instance):
pass
f1 = Foo()
f1.name = "CJJ"
print(f1.name)
del f1.name
描述符的作用是代理另一个类的某个变量,当对那个变量进行操作的时候才会触发描述符内的方法
class Foo:
def __get__(self, instance, owner):
print("__get__执行啦")
def __set__(self, instance, value):#这里的self是实例自己,相当于f1.__set__()
print("__set__执行啦")
def __delete__(self, instance):
print("__delete__执行啦")
class Bar:
name = Foo()
def __init__(self, name, age):
self.name = name
self.age = age
f1 = Bar("MB", 18)
f1.name = "Cjj"
del f1.name
print(f1.age)
print(Bar.name)#通过类调用被代理变量也会触发描述符
print(type(f1)</