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
因为 fun2 进去后又执行了 __fun1 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
>>>
python爱好者. 发表于 2022-5-1 19:17
因为 fun2 进去后又执行了 __fun1
这里执行的__fun1是父类C的还是 它自己的?
它自己不是应该没有继承到__fun1么 minamikotori 发表于 2022-5-1 19:25
这里执行的__fun1是父类C的还是 它自己的?
它自己不是应该没有继承到__fun1么
继承到了呀,你这里继承了 C ,自然就将里面的方法(函数)全都继承了呀(哪怕你前缀 "__" ,也会导入,一切全靠自觉) python爱好者. 发表于 2022-5-1 19:30
继承到了呀,你这里继承了 C ,自然就将里面的方法(函数)全都继承了呀(哪怕你前缀 "__" ,也会导入,一切 ...
懂了 谢谢 {:5_109:} {:5_95:} 6666666666666666 学习了!!!
页:
[1]