本文實(shí)例講述了Python面向?qū)ο笾涌凇⒊橄箢惻c多態(tài)。分享給大家供大家參考,具體如下:
接口類
繼承有兩種用途:
一:繼承基類的方法,并且做出自己的改變或者擴(kuò)展(代碼重用)
二:聲明某個(gè)子類兼容于某基類,定義一個(gè)接口類Interface,接口類中定義了一些接口名(就是函數(shù)名)且并未實(shí)現(xiàn)接口的功能,子類繼承接口類,并且實(shí)現(xiàn)接口中的功能
接口主要是java等語(yǔ)言中的概念,python中并沒(méi)有明確的限定
from abc import ABCMeta,abstractmethodclass Payment(metaclass=ABCMeta): @abstractmethod def pay(self,money): passclass Wechatpay(Payment): def fuqian(self,money): print('微信支付了%s元'%money)p = Wechatpay() #不調(diào)就報(bào)錯(cuò)了
抽象類
什么是抽象類
與java一樣,python也有抽象類的概念但是同樣需要借助模塊實(shí)現(xiàn),抽象類是一個(gè)特殊的類,它的特殊之處在于只能被繼承,不能被實(shí)例化
為什么要有抽象類
如果說(shuō)類是從一堆對(duì)象中抽取相同的內(nèi)容而來(lái)的,那么抽象類就是從一堆類中抽取相同的內(nèi)容而來(lái)的,內(nèi)容包括數(shù)據(jù)屬性和函數(shù)屬性。
比如我們有香蕉的類,有蘋(píng)果的類,有桃子的類,從這些類抽取相同的內(nèi)容就是水果這個(gè)抽象的類,你吃水果時(shí),要么是吃一個(gè)具體的香蕉,要么是吃一個(gè)具體的桃子。。。。。。你永遠(yuǎn)無(wú)法吃到一個(gè)叫做水果的東西。
從設(shè)計(jì)角度去看,如果類是從現(xiàn)實(shí)對(duì)象抽象而來(lái)的,那么抽象類就是基于類抽象而來(lái)的。
從實(shí)現(xiàn)角度來(lái)看,抽象類與普通類的不同之處在于:抽象類中只能有抽象方法(沒(méi)有實(shí)現(xiàn)功能),該類不能被實(shí)例化,只能被繼承,且子類必須實(shí)現(xiàn)抽象方法。這一點(diǎn)與接口有點(diǎn)類似,但其實(shí)是不同的,即將揭曉答案
在python中實(shí)現(xiàn)抽象類
import abc #利用abc模塊實(shí)現(xiàn)抽象類class All_file(metaclass=abc.ABCMeta): all_type='file' @abc.abstractmethod #定義抽象方法,無(wú)需實(shí)現(xiàn)功能 def read(self): '子類必須定義讀功能' pass @abc.abstractmethod #定義抽象方法,無(wú)需實(shí)現(xiàn)功能 def write(self): '子類必須定義寫(xiě)功能' pass# class Txt(All_file):# pass## t1=Txt() #報(bào)錯(cuò),子類沒(méi)有定義抽象方法class Txt(All_file): #子類繼承抽象類,但是必須定義read和write方法 def read(self): print('文本數(shù)據(jù)的讀取方法') def write(self): print('文本數(shù)據(jù)的讀取方法')class Sata(All_file): #子類繼承抽象類,但是必須定義read和write方法 def read(self): print('硬盤(pán)數(shù)據(jù)的讀取方法') def write(self): print('硬盤(pán)數(shù)據(jù)的讀取方法')class Process(All_file): #子類繼承抽象類,但是必須定義read和write方法 def read(self): print('進(jìn)程數(shù)據(jù)的讀取方法') def write(self): print('進(jìn)程數(shù)據(jù)的讀取方法')wenbenwenjian=Txt()yingpanwenjian=Sata()jinchengwenjian=Process()#這樣大家都是被歸一化了,也就是一切皆文件的思想wenbenwenjian.read()yingpanwenjian.write()jinchengwenjian.read()print(wenbenwenjian.all_type)print(yingpanwenjian.all_type)print(jinchengwenjian.all_type)
新聞熱點(diǎn)
疑難解答
圖片精選