为什么在使用property()函数时不调用setter?

2024-04-25 22:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下简单的python类,它使用property函数定义getter和setter:

class MyClass():

    def get_my_var(self):
        print "In get_my_var()"
        return None

    def set_my_var(self, value):
        print "In set_my_var()"
        return

    my_var = property(get_my_var, set_my_var)

当我实例化这个类并使用getter时,它可以正常工作:

^{pr2}$

然而,当我尝试使用setter时,它似乎根本没有被调用。setter中的print语句从不触发:

>>> print "About to do 'x.my_var = 5'"
About to do 'x.my_var = 5'
>>> x.my_var = 5
>>>

为什么吸气剂起作用而塞特不起作用?为什么没有错误?如何让setter作为advertised工作?在


Tags: toinselfgetreturnvarmydef
2条回答

属性需要位于新样式的类上才能正常工作。别忘了从object继承!在

class MyClass(object):  # !
    ...

您需要使用新样式的类:

class MyClass(object):

    def get_my_var(self):
        print "In get_my_var()"
        return None

    def set_my_var(self, value):
        print "In set_my_var()"
        return

    my_var = property(get_my_var, set_my_var)

在Python3中,新的样式类是唯一可以使用的样式,但是您显然在使用2.x(print是一个语句)。要获得新样式语义,必须从object继承。在

相关问题 更多 >