我在某些代码中遇到了意外问题,可以在一个更简单的示例中重现它:
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
的呼叫正常工作?我真的不应该进入该导入的类并将该私有方法公开。
答案 0 :(得分:2)
一个名称以2个下划线字符开头的函数无意从其类外部调用。并且为了允许用户在一个子类中重新定义它,每个类都调用它(不是常规方法重写),其名称被 mangled 修饰为_className__methodName
因此,在这里,您实际上不应该直接使用它,但是如果确实需要,您应该可以:
fc._FirstClass__function2()