我对 python 的了解越多,我就越感到困惑。
例如下面的代码:
class A:
def __init__ (self):
self.test = "a"
def dump(self):
print("A.test: %s" % (self.test,))
print("A.test: %s" % (self.__dict__["test"],))
print("A.test: %s" % (getattr(self, "test"),))
print()
class B (A):
def __init__ (self):
self.test = "b"
def dump(self):
print("B.test: %s" % (self.test,))
print("B.test: %s" % (self.__dict__["test"],))
print("B.test: %s" % (getattr(self, "test"),))
print()
o = B ()
o.dump()
A.dump(o)
super(B, o).dump()
印刷:
B.test: b
B.test: b
B.test: b
A.test: b
A.test: b
A.test: b
A.test: b
A.test: b
A.test: b
这似乎表明您可以调用基类的函数,但是如果该类具有在某些派生类中也使用过的属性,则您无法使用普通的 object.attribute 表示法访问此属性,或者您可能不能完全访问它。
这是真的吗?如果是这样,它会杀死 - 恕我直言 - 整个 python 对象模型。