我知道
Python name mangling
,但在使用mutliple继承时遇到意外行为。例如:
class A(object):
def __init__(self):
self.__foo=1
def bar(self):
return self.__foo
class B(object):
pass
class C(B):
def __init__(self):
self.test=1
class D(C,A):
pass
print D().bar()
从而产生错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in bar
AttributeError: 'D' object has no attribute '_A__foo'
class D(A,C):
pass
它起作用了。输出:
1
另外,如果我从类“C”中删除所有成员变量,则D的任何一个定义都有效
class C(B):
pass
class D1(A, C):
pass
class D2(C, A):
pass
print D1().bar()
print D2().bar()
1
1
有人能告诉我这里发生了什么事吗?我希望这些类定义的行为都一样。