Python基礎day-18[物件導向:繼承,組合,介面歸一化]

來源:互聯網
上載者:User

標籤:組合   裝飾器   屬性   class   roc   類的屬性   object類   python2   nan   

繼承:

  在Python3中預設繼承object類。但凡是繼承了object類以及子類的類稱為新式類(Python3中全是這個)。沒有繼承的稱為經典類(在Python2中沒有繼承object以及他的子類都是經典類。)

  繼承是類與類的關係,解決了代碼重用的問題,減少冗餘代碼。在Python中是先定義父類,然後在定義子類。最後使用 子類來執行個體化對象。

  "繼承是一種什麼是什麼的關係。例如:下面的s1是obj的子類。"

#父類的定義:
class obj: #定義一個obj類 passclass s1(obj): #定義s1類,括弧內填上其父類,多個父類使用逗號隔開。 passprint(obj.__bases__) #查看其繼承關係print(s1.__bases__)執行結果:D:\Python\Python36-32\python.exe E:/Python/DAY-18/tmp.py(<class ‘object‘>,) #預設繼承object類(<class ‘__main__.obj‘>,) #繼承的 obj類Process finished with exit code 0

  當對象引用了一個屬性,但是類中沒有的話就會去類的父類中查詢,沒有在繼續向上查詢。

class obj:      a = ‘abc‘   #父類中有一個變數 "a = ‘abc‘"class s1(obj):    passp1 = s1()    #使用子類執行個體化一個對象print(p1.a)  #查看對象p1的屬性a資訊執行結果:D:\Python\Python36-32\python.exe E:/Python/DAY-18/tmp.pyabc    #顯示的是父類的屬性資訊Process finished with exit code 0

 

 派生:

  指子類除從父類繼承的屬性,自己專屬的屬性。

class obj_1:    def __init__(self, name, age, sex):    #父類中共有的屬性        self.name = name        self.age = age        self.sex = sexclass obj_2(obj_1):        school = ‘Oldboy‘   #<------:這也是子類自己專屬的    def __init__(self, name, age, sex, salary):        obj_1.__init__(self, name, age, sex)      #傳值給父類        self.salary = salary   #自己專屬的屬性class stu(obj_1):    job = ‘student‘zhang = obj_2(‘zhang‘, 88, ‘nan‘, 5000)   #執行個體化對象wang = stu(‘wang‘, 55,‘nan‘)print(wang.name, wang.age, wang.job)print(zhang.name, zhang.age, zhang.sex, zhang.salary, zhang.school)執行結果:D:\Python\Python36-32\python.exe E:/Python/DAY-18/1.pywang 55 studentzhang 88 nan 5000 OldboyProcess finished with exit code 0

 

 

組合:

  "組合是一種 什麼有什麼的關係"

  也是用於減少重複代碼。

class obj_1:    def __init__(self, name, age, sex):        self.name = name        self.age = age        self.sex = sexclass obj_2(obj_1):    school = ‘Oldboy‘    def __init__(self, name, age, sex, salary,year,mon,day):        obj_1.__init__(self, name, age, sex)        self.salary = salary        self.birth = Date(year,mon,day)    #boj_1子類有個 Date <-----此處調用date類class stu(obj_1):    job = ‘student‘class Date:    #定義 Date類    def __init__(self,year,mon,day):        self.year = year        self.mon = mon        self.day = day    def tell_birth(self):        print(‘%s%s%s‘%(self.year,self.mon,self.day))zhang = obj_2(‘zhang‘, 88, ‘nan‘, 5000,1994,11,32)wang = stu(‘wang‘, 55,‘nan‘)print(wang.name, wang.age, wang.job)print(zhang.name, zhang.age, zhang.sex, zhang.salary, zhang.school,)zhang.birth.tell_birth()    #查看資訊執行結果:D:\Python\Python36-32\python.exe E:/Python/DAY-18/1.pywang 55 studentzhang 88 nan 5000 Oldboy19941132         #輸出資訊Process finished with exit code 0

 

 介面化歸一設計:

  限制子類一定要有父類的方法,子類實現的方法必須跟父類的方法名字一樣。

import abc   #匯入abc模組 class obj(metaclass=abc.ABCMeta):    #元類    @abc.abstractclassmethod   @調用裝飾器,限制子類的方法名    def read(self):        pass    @abc.abstractclassmethod    def write(self):        passclass s1(obj):    def read(self):    #子類的方法名必須跟父類一致,否則報錯        print(‘is read‘)    def write(self):        print(‘is write‘)class s2(obj):    def read(self):        print(‘is read‘)    def write(self):        print(‘is write‘)p1=s1()p1.read()   執行結果:D:\Python\Python36-32\python.exe E:/Python/DAY-18/tmp.pyis readProcess finished with exit code 0

 

Python基礎day-18[物件導向:繼承,組合,介面歸一化]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.