class A(object):
def __get(self):
pass
def _m(self):
return self.__get()
class B(A):
def _m(self):
return str(self.__get())
print(A()._m())
print(B()._m())
为什么print(A()._m())
会打印None
,但是print(B()._m())
会抛出AttributeError: 'B' object has no attribute '_B__get'
?
我以为双下划线可以防止方法覆盖。
如果__get
是私有的,那么为什么以下代码可以正常工作?
class A(object):
def __get(self):
pass
def _m(self):
return self.__get()
class B(A):
pass
print(A()._m())
print(B()._m())
为什么这段代码不会引发
AttributeError
而且会打印两次 None
?
B
中调用self.__get()
实际上是调用self._B__get()
,而后者并不存在。除非您想要这种行为,否则不要使用前导双下划线。 - kindall