我正在学习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__
?