python之接口繼承

接口繼承python

接口繼承就是(基類)父類定義好2個函數屬性(接口),全部的子類必須有這2個函數屬性,缺一不可,不是說省代碼的,是用來作強制性約束的函數

基類裏面的方法不用具體的實現,只是一個規範而已spa

1.1實現一個一切皆文件的概念code

class Disk: def read(self): pass def write(self): pass class Cdrom: def read(self): pass def write(self): pass class Mem: def read(self): pass def write(self): pass

1.2能夠定義一個基類,對上面代碼進行改進blog

class Allfile: def read(self): pass def write(self): pass class Disk(Allfile): def read(self): print("disk read") def write(self): print("disk write") class Cdrom(Allfile): def read(self): print("cdrom read") def write(self): print("cdrom write") class Mem(Allfile): def read(self): print("mem read") def write(self): print("mem write")

1.3可是子類也能夠不按照你規定的出牌,Mem就是不聽話,他不定義write的函數屬性,而後就會從父類找。父類裏面又是pass繼承

class Allfile: def read(self): pass def write(self): pass class Disk(Allfile): def read(self): print("disk read") def write(self): print("disk write") class Cdrom(Allfile): def read(self): print("cdrom read") def write(self): print("cdrom write") class Mem(Allfile): def read(self): print("mem read") m1=Mem() m1.read() m1.write() C:\python35\python3.exe D:/pyproject/day25/接口繼承.py mem read

1.4因此python就有一個專門的模塊來實現這個強制性的約束子類,模塊叫abc接口

導入模塊abc,給父類2個屬性加上裝飾器以後,若是子類再少屬性的話,就直接報錯了,這樣就強制性的約束了子類必須有父類的2個方法了it

import abc class Allfile(metaclass=abc.ABCMeta): @abc.abstractstaticmethod def read(self): pass @abc.abstractstaticmethod def write(self): pass class Disk(Allfile): def read(self): print("disk read") def write(self): print("disk write") class Cdrom(Allfile): def read(self): print("cdrom read") def write(self): print("cdrom write") class Mem(Allfile): def read(self): print("mem read") m1=Mem() TypeError: Can't instantiate abstract class Mem with abstract methods write

1.5當子類Mem也加上write這個方法以後就能夠正常運行了class

import abc class Allfile(metaclass=abc.ABCMeta): @abc.abstractstaticmethod def read(self): pass @abc.abstractstaticmethod def write(self): pass class Disk(Allfile): def read(self): print("disk read") def write(self): print("disk write") class Cdrom(Allfile): def read(self): print("cdrom read") def write(self): print("cdrom write") class Mem(Allfile): def read(self): print("mem read") def write(self): print("mem write") m1=Mem() m1.read() m1.write()  mem read mem write
相關文章
相關標籤/搜索