【发布时间】:2020-07-31 15:14:58
【问题描述】:
据我所知,在 Python 中将双下划线放在方法前面会使其私有化。因此,
class Test:
def __private_function(self):
print("This function is private!")
def public_function(self):
print("This function is public!")
但是,尽管名称前有双下划线,但“init”和“mro”等各种方法似乎都是完全公开的。换句话说:
class Test:
def __init__(self):
print("This function is public!")
为什么会这样?
【问题讨论】:
-
Python 没有私有方法,只是关于如何命名应该私有方法的约定。
-
“正如我被告知的那样,在方法前放置双下划线使其在 Python 中成为私有的。”您被误导了,Python 没有私有变量。前导双下划线用于名称修改,以防止子类中的意外名称冲突。如果您有前导 和 尾随双下划线,则不会发生这种情况,即所谓的“dunder”方法,它们用于 python 数据模型的特定部分。作为惯例,您使用 单个 下划线来表示不属于公共 API 的属性。
标签: python