Cris 的Python筆記(十):面向物件三大特徵之繼承
阿新 • • 發佈:2018-11-19
文章目錄
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'>)