minamikotori 发表于 2022-5-1 19:08:17

python 私有方法无法被子类继承的问题

class C:
    def __init__(self,a):
      self.a=a
    def __fun1(self):
      print("fun1")
    def fun2(self):
      self.__fun1()

      
class E(C):
    def fun(self):
      print("e")

那为什么子类E调用父类的fun2
可以去打印出fun1

python爱好者. 发表于 2022-5-1 19:17:00

因为 fun2 进去后又执行了 __fun1

isdkz 发表于 2022-5-1 19:19:18

python 并没有严格意义上的私有方法,私有方法只是会给方法名加上 "_类名",

而在方法内部调用双下划线开头的方法,解释器也会自动加上 "_类名",

而在方法外部调用则需要你自己加上去了

>>> class C:
...   def __init__(self,a):
...         self.a=a
...   def __fun1(self):
...         print("fun1")
...   def fun2(self):
...         self.__fun1()
...
>>>
>>> class E(C):
...   def fun(self):
...         print("e")
...
>>>
>>> dir(C)
['_C__fun1', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fun2']
>>> e = E(7)
>>> dir(e)
['_C__fun1', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'fun', 'fun2']
>>> e._C__fun1()
fun1
>>>

minamikotori 发表于 2022-5-1 19:25:11

python爱好者. 发表于 2022-5-1 19:17
因为 fun2 进去后又执行了 __fun1

这里执行的__fun1是父类C的还是 它自己的?
它自己不是应该没有继承到__fun1么

python爱好者. 发表于 2022-5-1 19:30:37

minamikotori 发表于 2022-5-1 19:25
这里执行的__fun1是父类C的还是 它自己的?
它自己不是应该没有继承到__fun1么

继承到了呀,你这里继承了 C ,自然就将里面的方法(函数)全都继承了呀(哪怕你前缀 "__" ,也会导入,一切全靠自觉)

minamikotori 发表于 2022-5-1 19:31:17

python爱好者. 发表于 2022-5-1 19:30
继承到了呀,你这里继承了 C ,自然就将里面的方法(函数)全都继承了呀(哪怕你前缀 "__" ,也会导入,一切 ...

懂了 谢谢

1050293757 发表于 2022-5-1 22:56:34

{:5_109:}

hornwong 发表于 2022-5-1 23:12:23

{:5_95:}

amazed 发表于 2022-5-2 00:59:50

6666666666666666

kerln888 发表于 2022-5-2 08:18:42

学习了!!!
页: [1]
查看完整版本: python 私有方法无法被子类继承的问题