物件導向-繼承

壹貳叄一發表於2020-10-22

 

繼承的概念

1. 經典類或舊式類(Python3.0以下)

不由任意內建型別派生出的類,稱之為經典類

class 類名:
    程式碼
    ......

2. 新式類(Python3.0及以上)

class 類名(object):
    程式碼
    ......

python物件導向的繼承指的是多個類質檢的所屬關係,即子類預設繼承父類的所有屬性和方法。具體如下:

#A:父類
class A(object):
    def __init__(self):
        self.num = 1

    def info_print(self):
        print(self.num)

#B:子類
class B(A):
    pass

result = B()
result.info_print()

在Python中,所有類預設繼承object類,object類是頂級類或基類;其他子類叫做派生類。

 

二、單繼承

#1. 師父類
class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎餅果子配方]'

    def make_cake(self):
        print(f'運用{self.kongfu}製作煎餅果子')

#2. 定義徒弟類,繼承師父類
class Prentice(Master):
    pass

#3. 用徒弟類建立物件,呼叫例項屬性和方法
daqiu = Prentice()
daqiu.make_cake()

三、多繼承

所謂多繼承,就是指一個類同時繼承多個父類。

 

#1. 師父類
class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎餅果子配方]'

    def make_cake(self):
        print(f'運用{self.kongfu}製作煎餅果子')

#2. 建立學校類
class School(object):
    def __init__(self):
        self.kongfu = '[黑馬煎餅果子配方]'

    def make_cake(self):
        print(f'運用{self.kongfu}製作煎餅果子')


#3. 多繼承
class Prentice(School,Master):
    pass

#3. 用徒弟類建立物件,呼叫例項屬性和方法,驗證多繼承方法

daqiu = Prentice()
daqiu.make_cake()
'''
結論:如果一個類繼承多個類,優先繼承第一個父類的同名屬性和方法
'''
結論:如果一個類繼承多個類,優先繼承第一個父類的同名屬性和方法

四、子類重寫父類同名方法和屬性
#1. 師父類
class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎餅果子配方]'

    def make_cake(self):
        print(f'運用{self.kongfu}製作煎餅果子')

#2. 建立學校類
class School(object):
    def __init__(self):
        self.kongfu = '[黑馬煎餅果子配方]'

    def make_cake(self):
        print(f'運用{self.kongfu}製作煎餅果子')

#3. 定義徒弟類,繼承師父類和學校類,新增和父類同名的屬性和方法
class Prentice(School,Master):
    def __init__(self):
        self.kongfu = '[獨創煎餅果子配方]'

    def make_cake(self):
        print(f'運用{self.kongfu}製作煎餅果子')

daqiu = Prentice()

print(daqiu.kongfu)

daqiu.make_cake()

print(Prentice.__mro__)    ##通過列印類的.__mro__來檢視該類的繼承關係

結論:如果子類和父類擁有同名屬性和方法,子類建立物件呼叫屬性和方法的時候,呼叫到的是子類裡面的同名屬性和方法。

擴充:mro順序

相關文章