python類的繼承

什麼是繼承

繼承是一種建立類的方法,一個類能夠繼承一個或多個父類,原始類稱爲基類或超類。
繼承能夠很方便的幫助子類擁有父類的屬性和方法,減小代碼冗餘,子類能夠定義本身的方法和屬性,也能夠覆蓋父類的方法和屬性。html

實現繼承

  • 建立一個父類Animal,在父類中定義方法或屬性:
class Animal():
    def __init__(self, kind, age):
        self.kind = kind
        self.age = age
        print("這是父類的__init__方法")
    def info(self):
        print('這是一隻' + self.kind, ',今年' + self.age + '歲了')

animal = Animal('狗', '5')
animal.info()

# 這是父類的__init__方法
# 這是一隻狗 ,今年5歲了
  • 而後建立一個子類,繼承上面的Animal父類,同時會繼承父類的屬性和方法:
class Cat(Animal):
    pass # 不想向類中添加任何其餘的屬性或者方法,可使用關鍵字pass

cat = Cat('貓','3')
cat.info()

# 這是父類的__init__方法
# 這是一隻貓 ,今年3歲了
  • 當子類繼承了父類的__init__()方法後,會在建立對象時自動調用。

你能夠在子類中從新建立一個__init__()方法,這樣既能夠繼承父類的屬性,又能夠給這個子類添加新的屬性:python

class Cat(Animal):
    def __init__(self, kind, age, name):
        self.kind = kind
        self.age = age
        self.name = name
        print("這是子類的__init__方法")
    def info(self):  # 若是在子類中添加一個父類同名的方法,會覆蓋父類的方法
        print('這是一隻' + self.kind, ',今年' + self.age + '歲了', '它的名字是'+self.name)

cat = Cat('貓, '3', 'xixi')
cat.info()

# 這是子類的__init__方法
# 這是一隻貓,今年3歲了 它的名字是xixi

如上所示,在子類中添加了一個info()方法,這是一個和父類中的方法同名的方法,會覆蓋父類原有的方法。當你須要子類中用特殊或不一樣的功能時就能夠這樣作。code

多繼承

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    ...
    <statement-N>

須要注意圓括號中基類(父類)的順序,如果基類中有相同的方法名,而在子類使用時未指定,python從左至右搜索 即方法在子類中未找到時,從左到右查找基類中是否包含方法。htm

class Parent(object):
    def info(self):
        print('This is Parent')
    def show(self):
        print("show time")


class A(Parent):  # 繼承Parent
    def info(self):  # 自動覆蓋父類的此方法
        print('This is A')


class B(Parent):  # 繼承Parent
    def info(self):
        print('This is B')


class C(A, B):  # 繼承A,B
    pass
  • 以下所示,建立A類的實例對象後,調用info()方法,輸出的是This is A,由於A類自身的info方法會覆蓋父類Parent中的info方法。

而用實例對象調用show()方法調用的是父類Parent中的方法,由於A類中沒有這個方法,因此會去父類中查找。對象

a = A()
a.info()  
# 輸出:This is A

a.show()  
# 輸出:show time
  • 類B和類A的狀況是類似的:
b = B()
b.info()  
# 輸出:This is B

a.show()  
# 輸出:show time
  • 而下面的代碼中由於C類繼承了兩個父類,因此建立C的實例對象去調用info()方法時,須要注意一下這個info()方法是哪一個父類中的方法。只要記住查找的順序是從左至右就能夠了,因此最終調用的是父類A中的info()方法。
c = C()
c.info()  
# 輸出: This is A

參考:https://www.9xkd.com/course/1039962250.html繼承

相關文章
相關標籤/搜索