python 繼承機制


繼承機制經常用於創建和現有類功能類似的新類,又或是新類只需要在現有類基礎上添加一些成員(屬性和方法),但又不想將現有類代碼復制給新類。也就是說,通過繼承這種機制,可以實現類的重復使用。

class Shape:
    def draw(self, content):
        print("畫", content)
#class Form(Shape)就表示Form繼承Shape
class Form(Shape):
    def area(self):
        print("此圖形的面積為...")
#實現方法為:讓Form類繼承Shape類,這樣當Form類對象調用draw()方法時,python解釋器會先去Form中找以draw為名的方法,如果找不到,它會自動去Shape類中找。
python中實現繼承的類稱為子類,被繼承的類稱為父類(也可稱為基類、超類)。
子類繼承父類時,只需在定義子類時,將父類(可以是多個)放在子類之后的圓括號里即可。
注意:如果該類沒有顯式指定繼承自哪個類,則默認繼承object類(object類是python中所有類的父類)。
python的繼承是多繼承機制(和C++一樣),即一個子類可以同時擁有多個直接父類。
class People:
    def say(self):
        print("我是一個人,名字是:", self.name)
class Animal:
    def display(self):
        print("人也是高級動物")
#同時繼承People和Animal類
#其同時擁有name屬性、say()方法、display()方法
class Person(People, Animal):
    pass
xiaobai = Person()
xiaobai.name = "小白"
xiaobai.say()
xiaobai.display()
我是一個人,名字是: 小白
人也是高級動物
子類擁有父類所有的屬性和方法,即便該屬性或方法是私有(private)的。

關於python的多繼承

使用多繼承經常需要面臨的問題是,多個父類中包含同名的類方法。對於這種情況,python的處置措施是:根據子類繼承多個父類時這些父類的前后次序決定,即排在前面的父類中的類方法會覆蓋排在后面的父類中的同名類方法。

class People:
    def __init__(self):
        self.name = People
    def say(self):
        print("People類", self.name)
class Animal:
    def __init__(self):
        self.name = Animal
    def say(self):
        print("Animal類", self.name)
#People中的name屬性和say()方法會覆蓋Animal類中的
class Person(Peolpe, Animal):
    pass
xiaobai = Person()
xiaobai.name = "小白"
xiaobai.say()
People類 小白

注意:雖然python在語法上支持多繼承,但除非逼不得已,建議不要使用多繼承。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM