从另一个模块调用python中的私有类成员函数

Jos*_*hba 2 python import class

是否可以调用在另一个类中声明的私有函数?如果是,我需要在我的主文件中调用一个函数。这个函数必须从另一个模块导入。这个函数在一个类中定义如下。

class ConfLoader(object):
.....
    def _set_config_value(self, section, attribute, value):
....
Run Code Online (Sandbox Code Playgroud)

有什么建议 ?

bri*_*pck 8

Python 没有“强制”私有函数,但它确实有一个命名约定,这使得意外执行变得更加困难。这通常是通过在前面加上下划线来完成的(不像您的示例中那样,是单个下划线,它用作普通方法名称)。例如:

class X(object):
    def __f(self):
        print('hello')
Run Code Online (Sandbox Code Playgroud)

如果我尝试在类定义之外使用相同的名称,它将失败:

>>> x = X()
>>> x.__f()
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    x.__f()
AttributeError: 'X' object has no attribute '__f'
Run Code Online (Sandbox Code Playgroud)

相反,Python 使用_ClassName__PrivateMethod. 我仍然可以使用以下方法在类定义之外调用这个伪私有函数:

>>> x._X__f()
hello
Run Code Online (Sandbox Code Playgroud)

请参阅为什么 Python 的“私有”方法实际上不是私有的?一些更有用的信息。

请注意,当然,仅仅因为某些事情是可能的并不意味着它是一个好主意。一个设计良好的类具有私有函数是有原因的:这些是​​内部函数,不能与外部函数安全交互。