我有以下简单的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时,它可以正常工作:
>>> x = MyClass()
>>> print "x.my_var = %s" % x.my_var
In get_my_var()
x.my_var = None
然而,当我尝试使用setter时,它似乎根本没有被调用。来自setter中的print语句永远不会触发:
>>> print "About to do 'x.my_var = 5'"
About to do 'x.my_var = 5'
>>> x.my_var = 5
>>>
为什么getter工作但不是setter?为什么没有错误?如何让setter工作为advertised?
答案 0 :(得分:3)
属性需要在 新样式 类上才能正常运行。不要忘记继承object
!
class MyClass(object): # !
...
答案 1 :(得分:1)
您需要使用新式的课程:
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)
在Python 3中,新样式类是您可以使用的唯一样式,但您明确使用2.x(print
是一个声明)。要获得新式语义,您必须继承object
。