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)
所以问题是我如何从类方法中调用全局函数?
我最近读了一本书" O'Reilly学习Python "(第944页,第31章),并且提到当你使用双下划线__作为方法或变量的起始字符时Class,它会自动附加_classname到函数在哪里classname是类名.这样做是为了将名称本地化到它所属的类.这在Pseudoprivate类属性的上下文中称为名称Mangling.
这样,您可以__variable在两个不同的类中使用相同的名称,A并且B变量/方法将分别变为私有_A__variable和方法_B__variable.因此,只需使用单个下划线将您的全局函数命名为其他内容,以避免此冲突.
不要使用双下划线。
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)
应该管用
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |