繁体   English   中英

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

[英]How do you call a private module function from inside a class?

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

def __myFunc():
    ...

class MyClass(object):
    def __init__(self):
        self.myVar = __myFunc()

我得到错误:

NameError: global name '_MyClass__myFunc' is not defined

如何从类内部调用此函数?

编辑:自发布以来,我发现我可以通过使用单个下划线而不是双下划线来避免自动修改。 我在“ Dive Into Python”中使用了两个,但仅指出双下划线表示私有函数。

这是因为,如果名称以两个下划线开头,则Python的编译器会替换类中的方法调用(和属性访问)。 似乎这样也适用于函数。 例如,对方法self.__X调用将被self._ClassName__X代替。 这样就可以拥有伪私有属性和方法。

绝对没有必要为模块内部的功能使用两个下划线。 如果不应该从外部调用函数,则程序员通常遵循在函数名称前加一个下划线的约定。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM