我有以下代码:
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
所以问题是如何在类方法中调用全局函数?
答案 0 :(得分:7)
我最近正在读一本书“ Learning Python by O'Reilly”(第944页,第31章),并且提到当您使用双下划线__
作为方法中的方法或变量的起始字符时, Class
,它会自动将_classname
附加到该函数,其中classname
是类名。这样做是为了将名称本地化为它所属的类。在伪私有类属性的上下文中,这称为名称处理。
通过这种方式,您可以在两个不同的类__variable
和A
中使用相同的名称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()
应该工作