我正在学习python中的描述符。我想编写一个非数据描述符,但是将描述符作为其类方法的类在调用类方法时不会调用__get__
特殊方法。这是我的示例(没有__set__
):
class D(object):
"The Descriptor"
def __init__(self, x = 1395):
self.x = x
def __get__(self, instance, owner):
print "getting", self.x
return self.x
class C(object):
d = D()
def __init__(self, d):
self.d = d
这是我的称呼:
>>> c = C(4)
>>> c.d
4
描述符类的__get__
没有任何调用。但是当我还设置了__set__
时,描述符似乎已激活:
class D(object):
"The Descriptor"
def __init__(self, x = 1395):
self.x = x
def __get__(self, instance, owner):
print "getting", self.x
return self.x
def __set__(self, instance, value):
print "setting", self.x
self.x = value
class C(object):
d = D()
def __init__(self, d):
self.d = d
现在我创建一个C
实例:
>>> c=C(4)
setting 1395
>>> c.d
getting 4
4
和__get__, __set__
都存在。似乎我缺少关于描述符及其使用方式的一些基本概念。谁能解释__get__, __set__
的这种行为?