关于python:调用导入类中的私有方法

call a private method in an imported class

本问题已经有最佳答案,请猛点这里访问。

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

文件1.Py

1
2
3
4
5
class FirstClass:
    def function1(self):
        print("hello from function1")
    def __function2(self):
        print("hello from function2")

文件2.Py

1
2
3
4
5
6
7
from file1 import FirstClass

fc = FirstClass()

fc.function1()

fc.__function2()

……接下来发生的事情是:

1
2
3
4
5
6
$ 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的呼叫有效?我真的不应该进入那个导入的类并将那个私有方法公开。


名称以2个下划线字符开头的函数不打算从其类外部调用。为了允许用户在子类中重新定义它,每个类都调用它的一个类(而不是普通的方法重写),它的名称被破坏为_className__methodName

因此,在这里,您确实不应该直接使用它,但是如果您确实需要,您应该能够做到:

1
fc._FirstClass__function2()