面向對象設計——類的繼承和多態(包含方法重寫,運算符重載)

一、類的繼承

(1)要點:

1、在繼承關係中,已有的、設計好的的類稱爲父類或基類,新設計的類稱爲子類或派生類。
2、派生類可以繼承父類的公有成員,但是不能繼承其私有成員。
3、在繼承中基類的構造函數[init()方法]不會被自動調用,它需要在其派生類的構造中親自專門調用。
4、如果需要在派生類中調用基類的方法是,通過“基類名。方法名()”的方式來實現,需要帶上基類的類名前綴且需要帶上self參數變量。

(2)代碼演示:

class Parent:        #定義父類
    a=100
    def __init__(self):
        print("調用父類構造函數")
    def method(self):
        print("調用父類方法")
    def set(self,attr):        #修改類屬性的值
        Parent.a=attr          #由於是類屬性,所以不用self.a
    def get(self):
        print("父類屬性:",Parent.a)
class Child(Parent):      #定義子類
    def __init__(self):
        print("調用子類構造函數")
    def childmethod(self):
        print("調用子類方法")
c=Child()          #實例化子類
c.childmethod()    #調用子類的方法
c.method()         #調用父類方法
c.set(200)         #調用父類方法
c.get()            #調用父類方法

結果:

調用子類構造函數
調用子類方法
調用父類方法
父類屬性: 200

二、類的多繼承

定義


Python的類可以繼承多個基類。繼承的基類列表跟在類名之後。類的多幾次語法:

 class ClassName(ParentClasee1[,ParentClasee2,...]):
          派生類成員

三、方法重寫

(1)定義:

重寫必須出現在繼承中。

它是指當派生類繼承了基類的方法之後,如果基類方法的功能不能滿足需求,需要對基類中的某些方法進行修改,可以在派生類重寫基類的方法,這就是重寫。

(2)代碼:

class Parent:        #定義父類
    def method(self):
        print("父類方法")
class Child(Parent):      #定義子類
    def method(self):
        print("子類方法")
c=Child()
c.method()

結果:

子類方法

(3)補充:

子類的method()覆蓋了父類的method()。

四、多態

(1)isinstance()的用法

判斷一個變量是否是某個類型。
代碼演示:

class Parent:        
    def method(self):
        pass
class Child:      
    def method(self):
        pass
a=Parent()    
b=Child()
if isinstance(a,Parent):
    print("True")
if isinstance(b,Child):
    print("True")

結果:

True
True

(2)多態的簡單使用

注意:

1、多態是方法的多態,屬性沒有多態。
2、多態的存在有2個必要條件:繼承、方法重寫。

簡單使用:

在繼承關係中,如果一個實例的數據類型是某個子類,那它的數據類型也可以被看做是父類,但是反過來就不行了。

代碼演示:

class Parent:        
    def method(self):
        print("父")
class Child(Parent):      
    def method(self):
        print("child")
class son(Parent):
    def method(self):
        print("son")
class son2(Parent):
    def method(self):
        print("son2")
def Human(m):
    if isinstance(m,Parent):
        m.method()          #多態,一個方法調用,根據對象不同調用不同的方法!
    else:
        print("不是")
Human(Child())
Human(son())
Human(son2())
a=Parent()
if isinstance(a,Child):
    print("父類的實例的數據類型也可以被看作子類的")
else:
    print("父類的實例的數據類型不可以被看作子類的")

結果:

child
son
son2
父類的實例的數據類型不可以被看作子類的

五、運算符重載

(1)知識點:

在這裏插入圖片描述

(2)代碼演示:

class Person:
    def __init__(self,name):
        self.name=name
    def __add__(self,other):
        if isinstance(other,Person):
            return "{}+{}".format(self.name,other.name)
        else:
            return "不是同類對象,不能相加"
P1=Person("小明")
P2=Person("小紅")
x=P1+P2         #加法運算會調用我們寫的__add__()函數
print(x)

結果:

小明+小紅

補充:
我總結我所有python筆記於一篇博客裏:
點擊即可進入Python學習筆記大總結(我把我所有python筆記做了總結和學習順序,點擊即可進入相關博客。希望可以便於你們閱讀)

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