面向對象編程_python不同類之間的方法調用


一、概要:在不同類中,想要實現調用對方類中的方法

 

不同類 之間的方法調用,且類之間存在繼承關系:

'''
繼承關系中
子類和父類存在相同的方法是,子類的實例對象調用該方法,會優先 使用子類中的方法,
但是如果想要在子類中同時調用子類方法和父類方法時,可以通過在子類方法中 通過 父類類名.方法名(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 傳入的是當前類的實例對象 ,故想要在當前類中調用其他類中方法的時,傳入當前類的實例對象是否能滿足可以被目標類的方法所處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM