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

2024-06-16 08:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

文件1.py

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

文件2.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的调用正常工作?我真的不应该进入那个导入的类并公开那个私有方法。你知道吗


Tags: 文件代码frompyselfhellodefclass
1条回答
网友
1楼 · 发布于 2024-06-16 08:51:33

名称以2个下划线字符开头的函数不打算从其类外部调用。为了允许用户在子类中重新定义它,每个类都调用它的子类(而不是正常的方法重写),它的名称是mangledto_className__methodName。你知道吗

所以在这里,你真的不应该直接使用它,但如果你真的需要,你应该能够做到:

fc._FirstClass__function2()

相关问题 更多 >