在导入的类中调用私有方法

时间:2019-01-11 15:50:32

标签: python python-3.x class oop

我在某些代码中遇到了意外问题,可以在一个更简单的示例中重现它:

file1.py

class FirstClass:
    def function1(self):
        print("hello from function1")
    def __function2(self):
        print("hello from function2")

file2.py

from file1 import FirstClass

fc = FirstClass()

fc.function1()

fc.__function2()

..这就是发生的情况:

$ python file2.py 
hello from function1
Traceback (most recent call last):
  File "file2.py", line 7, in <module>
    fc.__function2()
AttributeError: FirstClass instance has no attribute '__function2'

您该怎么做才能使对__function2的呼叫正常工作?我真的不应该进入该导入的类并将该私有方法公开。

1 个答案:

答案 0 :(得分:2)

一个名称以2个下划线字符开头的函数无意从其类外部调用。并且为了允许用户在一个子类中重新定义它,每个类都调用它(不是常规方法重写),其名称被 mangled 修饰为_className__methodName

因此,在这里,您实际上不应该直接使用它,但是如果确实需要,您应该可以:

fc._FirstClass__function2()