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

时间:2018-10-17 11:17:52

标签: python python-3.x python-2.7 class oop

我有以下代码:

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()

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

NameError: global name '_A__static_func' is not defined

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

2 个答案:

答案 0 :(得分:7)

我最近正在读一本书“ Learning Python by O'Reilly”(第944页,第31章),并且提到当您使用双下划线__作为方法中的方法或变量的起始字符时, Class,它会自动将_classname附加到该函数,其中classname是类名。这样做是为了将名称本地化为它所属的类。在伪私有类属性的上下文中,这称为名称处理

通过这种方式,您可以在两个不同的类__variableA中使用相同的名称B,因为变量/方法将私下变为_A__variable_B__variable分别。因此,只需使用单个下划线将全局函数命名为其他名称,即可避免这种冲突。

答案 1 :(得分:1)

请勿使用双下划线。

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()

应该工作