我正在将我的一些类从广泛使用 getter 和 setter 改为更Python 化地使用属性。
但现在我陷入了困境,因为我以前的一些 getter 或 setter 会调用基类的相应方法,然后执行其他操作。但是如何通过属性来实现这一点呢?如何调用父类中的属性getter或setter?
当然,仅调用属性本身就会产生无限递归。
class Foo(object):
@property
def bar(self):
return 5
@bar.setter
def bar(self, a):
print a
class FooBar(Foo):
@property
def bar(self):
# return the same value
# as in the base class
return self.bar # --> recursion!
@bar.setter
def bar(self, c):
# perform the same action
# as in the base class
self.bar = c # --> recursion!
# then do something else
print 'something else'
fb = FooBar()
fb.bar = 7
您可能认为您可以调用由属性调用的基类函数:
class FooBar(Foo):
@property
def bar(self):
# return the same value
# as in the base class
return Foo.bar(self)
虽然这是我认为最明显的尝试 -它不起作用,因为 bar 是一个属性,而不是一个可调用的。
但属性只是一个对象,有一个 getter 方法来查找相应的属性:
class FooBar(Foo):
@property
def bar(self):
# return the same value
# as in the base class
return Foo.bar.fget(self)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)