我在下面的代码中尝试了getter和setter的属性,当调用B类测试函数时,我希望将调用A类setter,但不幸的是创建了B类的新实例变量。在python 2.7.13中可以观察到此行为,并且在python 3中可以正常工作。
代码:
class A:
def __init__(self):
self.a = 10
@property
def vala(self):
print ("Into Vala getter")
return self.a
@vala.setter
def vala(self, a):
print ("Into Vala setter")
self.a = a
class B:
def test(self):
self.a = A()
self.a.vala = 10
print ("B.test completed")
b = B()
b.test()
使用python 2.7.13输出
B.test completed
使用python 3输出
Into Vala setter
B.test completed
我的问题是这是否是预期的行为,如何在python 2.7中使用合成?
答案 0 :(得分:2)
这是Python property decorator not working, why?的副本 在Python 2中,您需要从object继承以获得与Python 3相同的行为,否则您仍处在老式类中。