这里需要先说一下描述符的概念。
描述符:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议。
描述符分数据描述符,只有__get__的描述符是非数据描述符,有__get__和__set__的描述符是数据描述符。
__get__(self, instance, owner)—获取属性时调用,返回设置的属性值,通常是_set_中的value,或者附加的其他组合值。
__set__(self, instance, value) — 设置属性时调用,返回None.
__delete__(self, instance)— 删除属性时调用,返回None
其中,instance是这个描述符属性所在的类的实例,而owner是描述符所在的类。
看下面例子
class A(object):
name = "unchange"
def __init__(self, value):
print "into A __init__"
self.value = value
def __get__(self, instance, owner):
print "into __get__"
print instance,owner
class B(object):
value = A(10)
def __init__(self, value):
print "into B __init__"