我在谷歌上搜索了很多,但似乎无法弄清楚如何实际执行此操作:
假设我有一个像这样的通用实用方法:
def __square(n):
return n*n
然后我有一些我可能想在内部使用这个方法的类:
def __square(n):
return n*n
class Foo:
def __init__(self):
self.baz = 2
def bar(self):
return self.baz + __square(self.baz)
嗯,那行不通。我得到 NameError '_Foo__square' is not defined
为什么?
作为解决方法,我最终做了这样的事情:
class Foo:
def __init__(self):
self.baz = 2
def bar(self):
return baz + self.square(self.baz)
def square(self,n):
return n*n
但这对我来说感觉很傻,因为 square 函数与 Foo 实例无关,我也不期望或希望它成为 Foo 实例上的方法。
处理这类事情的“pythonic”方式是什么?
编辑
我至少弄清楚了其中的一部分:我之所以会出现这种行为,是因为我认为这些实用方法是私有(private)的,并且我一直将它们命名为 def __square(n):
。
我没有意识到这很特别,在输入上面的示例时,我最初并没有那样输入。我现在已经编辑了问题以反射(reflect)它的实际输入方式。
所以现在我的问题是:为什么将 __
放在顶级方法前面会破坏它,或者看起来会破坏它?我知道这是在 Python 中命名“私有(private)事物”的约定,因为它在这种情况下不起作用,您会推荐什么?
我是一名优秀的程序员,十分优秀!