gpt4 book ai didi

带有 __ 的 Python 'hide' 方法

转载 作者:太空狗 更新时间:2023-10-30 00:21:59 25 4
gpt4 key购买 nike

今天我看到了 - python 将 _$CLASSNAME$ 添加到名称为 __ 的方法中。

简单的例子:

>>> class A:  
... def a(self):
... self.b()
... def b(self):
... print('A.b')
...
>>> class B(A):
... def b(self):
... print('B.b')
...
>>> B().a()
B.b

那行得通,但是:

>>> class A:  
... def a(self):
... self.__b()
... def __b(self):
... print('A.b')
...
>>> class B(A):
... def __b(self):
... print('B.b')
...
>>> B().a()
A.b

为什么?我不知道,所以我把它弄脏了。在这里:

>>> print([fn for fn in dir(B) if fn[-2:] != '__'])
['_A__b', '_B__b', 'a']

为什么 python 会那样做?有没有办法绕过它?

最佳答案

这称为名称修改,用于防止与父类和子类发生意外名称冲突。你不能(也不应该,很多非常好的代码使用它)禁用它。你可以绕过它,但你也不应该那样做(它非常丑陋,你可以避免它,当你需要访问它时你不应该首先允许名称修改)。只需为您想要在任何地方使用的私有(private)函数使用一个下划线,但不能立即在类中使用。

参见 tutorial但忽略任何对 this 表示“私有(private)”变量的引用。这不是它的用途,除非你在 C++/Java/C#/...private 变量的意义上使用 private(相对于 protected 对子类可见)对子类隐藏。即便如此,这也是一个有缺陷的类比。

关于带有 __ 的 Python 'hide' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com