python基礎之組合繼承多態

組合python

1.什麼是組合linux

         組合就是一個類的對象具有一個指向另一個類的對象的屬性app

2.爲什麼用組合spa

         組合能夠減小代碼冗餘code

3.如何使用對象

class People:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
class Course:
    def __init__(self,name,period,price):
        self.name=name
        self.period=period
        self.price=price
    def tell_info(self):
        print('<%s %s %s>' %(self.name,self.period,self.price))
class Teacher(People):
    def __init__(self,name,age,sex,job_title):
        People.__init__(self,name,age,sex)
        self.job_title=job_title
        self.course=[]
        self.students=[]
class Student(People):
    def __init__(self,name,age,sex):
        People.__init__(self,name,age,sex)
        self.course=[]
egon=Teacher('egon',18,'male','沙河霸道金牌講師')
s1=Student('牛榴彈',18,'female')

python=Course('python','3mons',3000.0)
linux=Course('python','3mons',3000.0)

#爲老師egon和學生s1添加課程
egon.course.append(python)
egon.course.append(linux)
s1.course.append(python)
#爲老師egon添加學生s1
egon.students.append(s1)

#使用
for obj in egon.course:
    obj.tell_info()

菱形繼承問題        非菱形繼承都是深度優先blog

1.什麼是菱形繼承問題?繼承

         一個子類繼承多個父類,最終繼承同一個類it

2.python2中分經典類和新式類io

         經典類按深度優先查找屬性

         新式類按廣度優先查找屬性

注意:按照發起查找的類爲準,父類中既有新式類,又有經典類與查找的方式無關

 

在子類派生出的新功能中,重用父類功能的方式有兩種

1.指名道姓地訪問(與繼承無關)

2.嚴格依賴繼承屬性的查找關係

super()會獲得一個特殊的對象,該對象就是專門用來訪問父類中的屬性的(按照繼承關係)

super()__init__(name,age,) 不須要傳self,已經自動傳入

注意:在python2中須要寫完整super(本身的類名,self)__init__(name,age,)

super()誰查找就會以誰的mro()爲準,碰到super()會按當前的位置繼續日後找

 

 

多態與多態性

1.什麼是多態與多態性?

         多態指的是同一種事物的各類形態

         如水能夠有固態,液態,氣態

         多態性:繼承同一個類的多個子類中有相同的方法名,那麼子類產生的對象都能不考慮具體的類型而直接調用父類的功能

 

抽象類

import abc #利用abc模塊實現抽象類

 

class All_file(metaclass=abc.ABCMeta):  # 用於限制子類的定義

    all_type='file'

    @abc.abstractmethod #定義抽象方法,無需實現功能

    def read(self):

        '子類必須定義讀功能'

        Pass

 

python中不推薦使用抽象類,python推薦使用鴨子類型。

相關文章
相關標籤/搜索