python不能从staticmethod调用模块方法?

low*_*att 4 python

考虑以下模式:

'''some module body'''

def __foo():
    '''module method foo'''
    pass

class Dummy(object):
    @staticmethod
    def bar():
        __foo()

__foo() # No Error.
Dummy.bar() #NameError: Global name "_Dummy__foo" is not defined.
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

-

如果用"__"命名它是不好的,那么Python中使模块方法仅用于内部模块函数/方法的最佳做法是什么?

use*_*ica 5

不要以双下划线开始名称.在类语句中找到的任何标识符(从至少2个下划线开始,以少于2个下划线结尾)将被_Classname添加到其中,其中Classname是类的名称.这应该为私有变量提供有限的支持,但使用它通常被认为是不好的做法.