一、概要:在不同類中,想要實現調用對方類中的方法
不同類 之間的方法調用,且類之間存在繼承關系:
''' 繼承關系中 子類和父類存在相同的方法是,子類的實例對象調用該方法,會優先 使用子類中的方法, 但是如果想要在子類中同時調用子類方法和父類方法時,可以通過在子類方法中 通過 父類類名.方法名(self) 的方式完成調用 ''' class base: def __init__(self,name): self.name =name def f1(self): print('這是base的f1',self.name) class zilei(base): def f1(self): print('這是子類的f1') # 在子類中,通過父類.父類中的方法,將self傳入 實現在子類中調用父類中和子類名字一樣的方法 base.f1(self) z = zilei('哈哈') z.f1()
不同類 之間的方法調用,且類之間不存在繼承關系:
''' 非繼承關系中 不同類之間要實現 調用對方的方法, 假設要調用的方法為非實例方法(即該方法沒有操作對象變量相關數據): 則可以通過在當前類中 定義 目標類類名.目標類中的方法(self) 時間不同類之間的調用 假設要調用的方法為實例方法(方法內部操作了對象的相關數據),此場景下要想不同類之間的方法可以調用成功 需要滿足以下兩個條件 B類調用A類中的方法f2,A類中的方法對A類的實例變量進行了更改: A類中的f2方法 存在更改的A類的實例變量,則在B類中必須存在與f2要更改的實例變量名 相同的B類的實例變量名,因為此時傳入的使B類的實例 ''' class A: def __init__(self,name): self.name = name def f2(self): self.name = '張三' print('A類中的方法') class B: def __init__(self,name): self.name = name def f1(self): print('B類中的方法') # 傳入類型為B的實例對象, A.f2(self) class C: # 限定了C類的實例變量范圍 __slots__ = ('name','age') def f3(self): print('C類中的方法f3') A.f2(self) class D: __slots__ = ('age') def f4(self): print('D類中的方法f4') A.f2(self) #B類調用A類方法可以成功 a = B('李四') a.f1() #通過A類中的方法 更改了 a的 name值 print(a.name) # C類調用A類方法可以成功 c = C() c.f3() #通過A類中的方法 更改了 c的 name值 print(c.name ) #D類調用A類方法失敗 因為調用A類方法f2時傳入D類對象,但是D類對象並沒有name這個實例變量(D類的實例變量限制稱了age),故調用失敗 d = D() # d.f4()
三、總結:
不同類之間,不管類之間是否存在繼承關系,均可以在當前類的方法中 通過類名.方法名(self) 實現在類中調用對方的類中方法
注意:參數self 傳入的是當前類的實例對象 ,故想要在當前類中調用其他類中方法的時,傳入當前類的實例對象是否能滿足可以被目標類的方法所處理