python継承問題を深く分析する


下記のコードがあります。

class p1:
def __init__(self,a,b):
print("init in p1")
self.a1=a
self.b1=b
self.f1()
def f1(self):
print("f1 in p1")
class c1(p1):
def __init__(self,a,b,c=2):
print("init in c1")
p1.__init__(self,a,b)
self.c1=c
self.f1()
def f1(self):
print("f1 in p2")
class c2(c1):
pass
c=c2(11,22)
print(c.a1)
print(c.b1)
print(c.c1)
そしてコードの実行結果は以下の通りです。

F:\python_code\test>python class_init.py
init in c1
init in p1
f1 in p2
f1 in p2
11
22
2
コードの運行過程については、次のような疑問があります。init_関数からp 1._uu uinit_()そして、毎回c 1.f 1()関数を実行します。p 1.f 1()を実行する関数がなく、p 1で実行するf 1()は、どうしてもc 1.f 1()です。なぜですか?
原因分析:
p 1._u uinit_(u)self,a,b)
この行のコードの中のselfはc 1のオブジェクトです。p 1の中に伝わっているselfはつまりc 1です。
上記の内容はコードを通してpythonの継承問題を紹介しました。皆さんの助けになりたいです。