如何从同一类中的其他函数调用私有函数?
class Foo:
def __bar(arg):
#do something
def baz(self, arg):
#want to call __bar
现在,当我这样做时:
__bar(val)
从 baz() 中,我得到这个:
NameError: global name '_Foo__createCodeBehind' is not defined
有人可以告诉我错误的原因是什么吗? 另外,如何从另一个私有函数调用一个私有函数?
Python 中没有像 C/C++ 等中那样的隐式
this->
。你必须在 self
上调用它。
class Foo:
def __bar(self, arg):
#do something
def baz(self, arg):
self.__bar(arg)
这些方法并不是“真正”私有的。当你以两个下划线开头的方法名称时,Python 会进行一些名称修改以使其成为“私有”,这就是它所做的一切,它不会像其他语言那样强制执行任何操作。如果您在 __bar
上定义
Foo
,仍然可以通过 Foo._Foo__bar
从对象外部访问它。例如,可以这样做:f = Foo()
f._Foo__bar('a')
这也解释了您收到的错误消息中的“奇怪”标识符。
您可以在文档中找到它
。
__bar
是“私有的”(从某种意义上说,它的名称已被
mangled),但它仍然是
Foo
的方法,因此您必须通过self
引用它并将self
传递给它。仅用 __bar()
来调用它是行不通的;你必须这样称呼它:self.__bar()
。所以...>>> class Foo(object):
... def __bar(self, arg):
... print '__bar called with arg ' + arg
... def baz(self, arg):
... self.__bar(arg)
...
>>> f = Foo()
>>> f.baz('a')
__bar called with arg a
您可以在
self.__bar
定义内的任何位置访问
Foo
,但一旦超出定义,则必须使用 foo_object._Foo__bar()
。这有助于避免类继承上下文中的名称空间冲突。 如果这不是您使用此功能的原因,您可能会重新考虑使用它。在 Python 中创建“私有”变量和方法的约定是在名称中添加下划线