面向對象【七】接口繼承

python之接口繼承

 

接口繼承html

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

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

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

複製代碼
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能夠定義一個基類,對上面代碼進行改進url

複製代碼
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的函數屬性,而後就會從父類找。父類裏面又是passspa

複製代碼
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就有一個專門的模塊來實現這個強制性的約束子類,模塊叫abccode

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

複製代碼
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這個方法以後就能夠正常運行了blog

複製代碼
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
複製代碼
相關文章
相關標籤/搜索