Python 如何从类内部调用私有模块函数?

Python 如何从类内部调用私有模块函数?,python,Python,我有一个模块,看起来像这样: def __myFunc(): ... class MyClass(object): def __init__(self): self.myVar = __myFunc() 我得到了一个错误: NameError: global name '_MyClass__myFunc' is not defined 如何从类内部调用此函数 编辑:自从发布这篇文章以来,我发现我可以通过使用单下划线而不是双下划线来避免自动损坏。我在“深入Py

我有一个模块,看起来像这样:

def __myFunc():
    ...

class MyClass(object):
    def __init__(self):
        self.myVar = __myFunc()
我得到了一个错误:

NameError: global name '_MyClass__myFunc' is not defined
如何从类内部调用此函数


编辑:自从发布这篇文章以来,我发现我可以通过使用单下划线而不是双下划线来避免自动损坏。我在“深入Python”中使用了两个,它只声明了一个双下划线表示私有函数。

这是因为如果名称以两个下划线开头,Python编译器将替换类内的方法调用(和属性访问)。这似乎也适用于函数。例如,对方法
self.\uuux
的调用将被
self.\uclassname\uuuux
替换。这使得拥有伪私有属性和方法成为可能

绝对没有理由在模块内部的函数中使用两个下划线。如果函数不应该从外部调用,程序员通常会遵循在函数名前面加一个下划线的惯例


例如,如果您不希望子类覆盖类中的属性/方法,则只需要使用两个下划线。但是很少有这种情况是有用的。

这是因为如果名称以两个下划线开头,Python编译器将替换类内的方法调用(和属性访问)。这似乎也适用于函数。例如,对方法
self.\uuux
的调用将被
self.\uclassname\uuuux
替换。这使得拥有伪私有属性和方法成为可能

绝对没有理由在模块内部的函数中使用两个下划线。如果函数不应该从外部调用,程序员通常会遵循在函数名前面加一个下划线的惯例


例如,如果您不希望子类覆盖类中的属性/方法,则只需要使用两个下划线。但是在一些情况下这是有用的。

步骤1:不要使用双下划线。曾经没有意义。步骤1:不要使用双下划线。曾经这是没有意义的,“但在少数情况下,这是有用的”。作为一个实际问题,没有任何情况下这是有用的,“但很少有情况下这是有用的”。作为一个实际问题,这在任何情况下都是有用的。