【问题标题】:Why are some methods with "__" in front of them not private? [duplicate]为什么有些前面带“__”的方法不是私有的? [复制]
【发布时间】: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


【解决方案1】:

双前导下划线does not actually make a method private。单个前导下划线暗示该方法应仅供内部使用,但不由 python 强制执行。

__init__

有一个双前导和尾随下划线,这意味着它是一种魔术方法,保留供 python 特殊使用。您永远不应该使用双前导和尾随下划线命名方法。

【讨论】:

  • 是的,当然!对于那个很抱歉!你介意澄清一下魔术方法到底是什么吗?是不是像 python-builtin 之类的?
  • 是的,它们是内置的,由 Python 内部调用
猜你喜欢
  • 2017-11-09
  • 2019-09-27
  • 1970-01-01
  • 2020-05-14
  • 2010-09-09
  • 2011-03-07
  • 2020-09-07
  • 2014-06-03
  • 1970-01-01
相关资源
最近更新 更多