为什么在使用 属性() 函数时 setter 没有被调用?
Why doesn't setter get called when using property() function?
我有以下简单的 python class,它使用 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)
当我实例化此 class 并使用 getter 时,它按预期工作得很好:
>>> x = MyClass()
>>> print "x.my_var = %s" % x.my_var
In get_my_var()
x.my_var = None
然而,当我尝试使用 setter 时,它似乎根本没有被调用。 setter 中的打印语句从不触发:
>>> print "About to do 'x.my_var = 5'"
About to do 'x.my_var = 5'
>>> x.my_var = 5
>>>
为什么 getter 有效而 setter 无效?为什么没有任何错误?我如何让 setter 像 advertised 一样工作?
属性需要 新样式 类 才能正常工作。不要忘记继承自 object
!
class MyClass(object): # !
...
您需要使用新样式class:
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中,新的样式classes是你唯一可以使用的样式,但你显然在使用2.x(print
是声明) .要获得新式语义,您必须继承自 object
.
我有以下简单的 python class,它使用 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)
当我实例化此 class 并使用 getter 时,它按预期工作得很好:
>>> x = MyClass()
>>> print "x.my_var = %s" % x.my_var
In get_my_var()
x.my_var = None
然而,当我尝试使用 setter 时,它似乎根本没有被调用。 setter 中的打印语句从不触发:
>>> print "About to do 'x.my_var = 5'"
About to do 'x.my_var = 5'
>>> x.my_var = 5
>>>
为什么 getter 有效而 setter 无效?为什么没有任何错误?我如何让 setter 像 advertised 一样工作?
属性需要 新样式 类 才能正常工作。不要忘记继承自 object
!
class MyClass(object): # !
...
您需要使用新样式class:
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中,新的样式classes是你唯一可以使用的样式,但你显然在使用2.x(print
是声明) .要获得新式语义,您必须继承自 object
.