如何从类方法调用全局函数

Nic*_*ick 4 python oop class python-2.7 python-3.x

我有以下代码:

def __static_func(name):
    print 'Name = ' + name

class A:
    def __init__(self, name):
        self.name = name
    def fun(self):
        __static_func(self.name)

a = A('foo')
a.fun()
Run Code Online (Sandbox Code Playgroud)

在Python 2.7上启动时,它会生成

NameError: global name '_A__static_func' is not defined
Run Code Online (Sandbox Code Playgroud)

所以问题是我如何从类方法中调用全局函数?

She*_*ore 7

我最近读了一本书" O'Reilly学习Python "(第944页,第31章),并且提到当你使用双下划线__作为方法或变量的起始字符时Class,它会自动附加_classname到函数在哪里classname是类名.这样做是为了将名称本地化到它所属的类.这在Pseudoprivate类属性的上下文中称为名称Mangling.

这样,您可以__variable在两个不同的类中使用相同的名称,A并且B变量/方法将分别变为私有_A__variable和方法_B__variable.因此,只需使用单个下划线将您的全局函数命名为其他内容,以避免此冲突.


Phi*_*lip 5

不要使用双下划线。

def _static_func(name):
    print 'Name = ' + name

class A:
    def __init__(self, name):
        self.name = name
    def fun(self):
        _static_func(self.name)

a = A('foo')
a.fun()
Run Code Online (Sandbox Code Playgroud)

应该管用