在python 2.7中的getter和setter上使用属性时发生意外行为

时间:2018-10-06 09:44:41

标签: python-2.7 python-decorators

我在下面的代码中尝试了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中使用合成?

1 个答案:

答案 0 :(得分:2)

这是Python property decorator not working, why?的副本 在Python 2中,您需要从object继承以获得与Python 3相同的行为,否则您仍处在老式类中。