【发布时间】:2023-08-15 01:03:02
【问题描述】:
看看这个。
请注意,B 类会覆盖 A 的 a() 方法。
In [1]: class A(object):
...: def __init__(self):
...: self.a()
...: def a(self):
...: print "A.a()"
...:
...:
In [2]: class B(A):
...: def __init__(self):
...: super(B, self).__init__()
...: def a(self):
...: print "B.a()"
...:
...:
In [3]: b = B()
B.a()
没有惊喜。
现在,看看这个。
请注意,现在被覆盖的方法是__a()。
In [7]: class A(object):
...: def __init__(self):
...: self.__a()
...: def __a(self):
...: print "A.__a()"
...:
...:
In [8]: class B(A):
...: def __init__(self):
...: super(B, self).__init__()
...: def __a(self):
...: print "B.__a()"
...:
...:
In [9]: b = B()
A.__a()
这种行为让我很吃惊。
谁能解释为什么调用A.__a() 而不是B.__a()?
关于__a的任何__special__?
更新: 在阅读了 Sean 的回答后,我想看看我是否可以覆盖 name mangled 方法并得到以下结果:
In [11]: class B(A):
....: def __init__(self):
....: super(B, self).__init__()
....: def _A__a(self):
....: print "B._A__a()"
....:
....:
In [12]: b = B()
B._A__a()
【问题讨论】:
标签: python