Py学习  »  Python

具有私有继承的Python名称损坏

joesdiner • 5 年前 • 1867 次点击  

我知道 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

有人能告诉我这里发生了什么事吗?我希望这些类定义的行为都一样。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53577
 
1867 次点击  
文章 [ 1 ]  |  最新文章 5 年前