1. 程式人生 > >Cris 的Python筆記(十):面向物件三大特徵之繼承

Cris 的Python筆記(十):面向物件三大特徵之繼承

文章目錄

1、繼承的特性

# 通過繼承可以使得子類很好的複用父類的程式碼,減少冗餘程式碼,同時更加符合現實邏輯(程式設計就是對現實世界的抽象),符合 ocp 原則(open-change-principle)

# object 是一切類的超類,所有物件都是object 的例項
'''
    方法的覆寫:和Java 類似,子類可以對父類的方法進行覆寫,子類例項呼叫的時候如果子類覆寫則呼叫子類的方法,否則呼叫父類的方法(就近原則)
'''
# super:子類繼承父類的所有方法(包括魔術方法),不僅可以重寫普通方法,還可以重寫魔術方法,以__init__方法為例,在子類的方法裡通過 super 呼叫父類的方法 class Animal(object): def __init__(self, name): self._name = name def run(self)->None: print('動物在奔跑') def eat(self, food: str)->None: print('動物在吃:%s' % food) @property
def name(self): return self._name @name.setter def name(self, name): self._name = name class Dog(Animal): def __init__(self, name, age): # 通過super 呼叫父類的__init__ 方法來初始化父類定義的屬性,不需要再傳遞self 引數 super().__init__(name) self._age = age def bar
(self): print('狗在嚎叫!') def run(self): print('狗在奔跑~') d1 = Dog('cris', 11) d1.run() # 動物在奔跑/狗在奔跑 d1.eat('狗糧') # 動物在吃:狗糧 d1.bar() # 狗在嚎叫! print(isinstance(d1, Dog)) # True print(isinstance(d1, Animal)) # True print(issubclass(Dog, Animal)) # True print(issubclass(Animal, Dog)) # False

2、Python 的多繼承(瞭解)

# Python支援多繼承!(瞭解)
# 實際開發中應該儘量避免多繼承,否則會造成程式碼的邏輯複雜;多個父類擁有相同的方法,按照繼承順序,前面的父類覆蓋後面的父類


class A(object):
    def __init__(self):
        super(A, self).__init__()

    def func_a(self):
        print('A中的方法')


class B(object):

    def __init__(self):
        super(B, self).__init__()

    def func_b(self):
        print("B中的方法")


class C(A, B):

    def __init__(self):
        super(C, self).__init__()


c = C()
c.func_a()  # A中的方法
c.func_b()  # B中的方法
print(C.__bases__)  # (<class '__main__.A'>, <class '__main__.B'>)