参见英文答案 >
How do you call a private module function from inside a class? 1个
我用谷歌搜索了一堆,似乎无法弄清楚如何实际做到这一点:
鉴于我有一个通用的实用方法,如下所示:
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’没有定义
为什么?
作为一种解决方法,我最终做了这样的事情:
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”方式?
编辑
我想出了至少一部分:我得到了这种行为,因为我认为这些实用程序方法是私有的,我一直在命名它们像def __square(n):.
我没有意识到这是特别的,当键入上面的例子时,我最初没有这样输入.我现在编辑了这个问题,以反映它实际输入的方式.
所以现在我的问题是:为什么将__置于顶级方法之前打破它,或者似乎?我理解这是在Python中命名“私有事物”的惯例,因为它在这种情况下不起作用,你会推荐什么呢?