【python基礎】十三、Python繼承

繼承

  • is a
  • has a

has a

對象 與 其成員的 從屬關係
學生類 借閱 了 一本書(書 屬於 圖書類)
那麼 學生來 has a 圖書類
即 一個類中使用了另一個類

is a

類之間的繼承
例如:PC機 和 工作站 都繼承計算機的共同屬性
父類 基類(子類)

  • 什麼時候需要繼承:

  • super class(父類)

python 沒有重載 只有重寫

  • c++的重載
int func()
{ return 0 }

int func(int x)
{ return x}

// 根據傳入參數的不同,執行不同的重載函數
def func():
    return 0
    
def func(x):
    return x
    
# python中第二個func會覆蓋的第一個

多繼承

  • 一個 基類 繼承 多個父類
class A(object):
    def test(self):
        print(' -- A')


class B(object):
    def test(self):
        print(' -- B')


class C(A, B):
    def test0(self):
        pass


c = C()
c.test()

import inspect

print(inspect.getmro(C))  # 返回搜索順序,從左向右
print(C.__mro__)
  • python2.7 經典類 和 新式類 的多繼承順序不同 瞭解

  • 經典類

# 經典類
class P1:
    def foo(self):
        print('p1-foo')


class P2:
    def foo(self):
        print('p2-foo')

    def bar(self):
        print('p2-bar')


class C1(P1, P2):
    pass


class C2(P1, P2):
    def bar(self):
        print('c2-bar')


class D(C1, C2):
    pass

print(D.__mro__)
  • 新式類

class P1(object):
    def foo(self):
        print('p1-foo')


class P2(object):
    def foo(self):
        print('p2-foo')

    def bar(self):
        print('p2-bar')


class C1(P1, P2):
    pass


class C2(P1, P2):
    def bar(self):
        print('c2-bar')


class D(C1, C2):
    pass


print(D.__mro__)
  • 關係圖:
實例化
Object
P1
P2
C1
C2
D
d

在b站學習中

個人主頁

學習鏈接

歡迎 批評 指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章