【发布时间】:2013-01-31 15:13:33
【问题描述】:
考虑一个具有“私有”方法的类,例如:
class Foo(object):
def __init__(self):
self.__method()
def __method(self):
print('42')
当我尝试继承Foo 并覆盖方法__method 时,可以看到Foo.__method 仍然被调用,而不是MoreFoo.__method。
class MoreFoo(Foo):
def __method(self):
print('41')
>>> MoreFoo()
42
<__main__.MoreFoo object at 0x7fb726197d90>
重写这种方法的方法是什么?
【问题讨论】:
-
出于兴趣,您从哪里得知这相当于一个私有变量?这是一个非常糟糕的误解,我一直看到它,不知道它来自哪里。
-
@Lattyware -- 我认为它来自名为“私有变量和类本地引用”的文档部分。它继续说没有私有变量......但是双下划线是你能得到的最接近的东西——“因为类私有成员有一个有效的用例(即避免名称的名称冲突名称由子类定义),对这种机制的支持有限,..."
标签: python oop methods subclass private-members