【发布时间】:2012-03-06 04:00:23
【问题描述】:
所以我有这个:
class Parent(object):
def __init__(self, val):
print 'enter Base init'
self._set_x(val)
print 'leave Base init'
def _get_x(self):
return self._x
def _set_x(self, val):
print 'enter Base _set_x'
self._x = val
print 'leave Base _set_x'
x = property(_get_x, _set_x)
class Child(Parent):
def _set_x(self, val):
print 'enter Child _set_x'
y = val * 2
super(Child, self)._set_x(y)
print 'leave Child _set_x'
child = Child(5)
num = child.x
child.x = 5
print num == child.x
当我运行它时,我得到了这个:
enter Base init
enter Child _set_x
enter Base _set_x
leave Base _set_x
leave Child _set_x
leave Base init
enter Base _set_x
leave Base _set_x
False
我一直在阅读,人们说覆盖不应该起作用,但我的问题是为什么这里有这种看似不一致的地方?从 init 调用时会调用子类的 setter,但是当您稍后对已初始化的对象进行操作时,它会调用基类的 setter。有人可以解释这里发生了什么吗?
【问题讨论】:
标签: python properties overriding