我有一个看起来像这样的模块:
def __myFunc():
...
class MyClass(object):
def __init__(self):
self.myVar = __myFunc()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
NameError: global name '_MyClass__myFunc' is not defined
Run Code Online (Sandbox Code Playgroud)
如何在课堂内调用此函数?
编辑:自发布以来,我发现我可以通过使用单个下划线而不是双下划线来避免自动修改.我按照"Dive Into Python"使用了两个,它只表示双下划线表示私有函数.
这是因为如果名称以两个下划线开头,Python的编译器会替换类中的方法调用(和属性访问).这似乎也适用于功能.例如,对方法的调用self.__X将被替换self._ClassName__X.这使得可以拥有伪私有属性和方法.
绝对没有理由在模块内部使用两个下划线.如果不应该从外部调用函数,程序员通常遵循在函数名前面放置一个下划线的约定.
例如,如果您不希望子类覆盖属性/方法,则只需要使用两个下划线.但是很少有这种情况有用.
| 归档时间: |
|
| 查看次数: |
2646 次 |
| 最近记录: |