在下面的 B 类中,我想要__set__
每当您赋值给 A 类中的函数时,就会调用该函数B().a
。相反,将值设置为B().a
覆盖B().a
与价值。 C类分配给C().a
工作正常,但我想为每个用户类都有一个单独的 A 实例,即我不想在 C() 的一个实例中更改“a”来更改所有其他实例中的“a”。我编写了几个测试来帮助说明问题。你能帮我定义一个同时通过 test1 和 test2 的类吗?
class A(object):
def __set__(self, instance, value):
print "__set__ called: ", value
class B(object):
def __init__(self):
self.a = A()
class C(object):
a = A()
def test1( class_in ):
o = class_in()
o.a = "test"
if isinstance(o.a, A):
print "pass"
else:
print "fail"
def test2( class_in ):
o1, o2 = class_in(), class_in()
if o1.a is o2.a:
print "fail"
else:
print "pass"
据此,文档 http://docs.python.org/reference/datamodel.html#implementing-descriptors:
以下方法只适用当类的实例包含
方法(所谓的描述符
班级)出现在班级词典中
另一个新式班级, 作为。。而被知道
所有者阶层。在示例中
下面,“属性”指的是
名称为键的属性
所有者阶层的财产”__dict__
。
描述符只能实现为
新式课程本身。
所以你不能在实例上有描述符。
但是,由于描述符获取对用于访问它的实例的引用,因此只需将其用作存储状态的键,您就可以根据实例具有不同的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)