成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術(shù)文章
文章詳情頁

Python如何定義接口和抽象類

瀏覽:12日期:2022-07-16 08:38:45

問題

你想定義一個接口或抽象類,并且通過執(zhí)行類型檢查來確保子類實現(xiàn)了某些特定的方法

解決方案

使用 abc 模塊可以很輕松的定義抽象基類:

from abc import ABCMeta, abstractmethodclass IStream(metaclass=ABCMeta): @abstractmethod def read(self, maxbytes=-1): pass @abstractmethod def write(self, data): pass

抽象類的一個特點(diǎn)是它不能直接被實例化,比如你想像下面這樣做是不行的:

a = IStream() # TypeError: Can’t instantiate abstract class# IStream with abstract methods read, write

抽象類的目的就是讓別的類繼承它并實現(xiàn)特定的抽象方法:

class SocketStream(IStream): def read(self, maxbytes=-1): pass def write(self, data): pass

抽象基類的一個主要用途是在代碼中檢查某些類是否為特定類型,實現(xiàn)了特定接口:

def serialize(obj, stream): if not isinstance(stream, IStream): raise TypeError(’Expected an IStream’) pass

除了繼承這種方式外,還可以通過注冊方式來讓某個類實現(xiàn)抽象基類:

import io# Register the built-in I/O classes as supporting our interfaceIStream.register(io.IOBase)# Open a normal file and type checkf = open(’foo.txt’)isinstance(f, IStream) # Returns True

@abstractmethod 還能注解靜態(tài)方法、類方法和 properties 。 你只需保證這個注解緊靠在函數(shù)定義前即可:

class A(metaclass=ABCMeta): @property @abstractmethod def name(self): pass @name.setter @abstractmethod def name(self, value): pass @classmethod @abstractmethod def method1(cls): pass @staticmethod @abstractmethod def method2(): pass

討論

標(biāo)準(zhǔn)庫中有很多用到抽象基類的地方。collections 模塊定義了很多跟容器和迭代器(序列、映射、集合等)有關(guān)的抽象基類。 numbers 庫定義了跟數(shù)字對象(整數(shù)、浮點(diǎn)數(shù)、有理數(shù)等)有關(guān)的基類。io 庫定義了很多跟I/O操作相關(guān)的基類。

你可以使用預(yù)定義的抽象類來執(zhí)行更通用的類型檢查,例如:

import collections# Check if x is a sequenceif isinstance(x, collections.Sequence):...# Check if x is iterableif isinstance(x, collections.Iterable):...# Check if x has a sizeif isinstance(x, collections.Sized):...# Check if x is a mappingif isinstance(x, collections.Mapping):

盡管ABCs可以讓我們很方便的做類型檢查,但是我們在代碼中最好不要過多的使用它。 因為Python的本質(zhì)是一門動態(tài)編程語言,其目的就是給你更多靈活性, 強(qiáng)制類型檢查或讓你代碼變得更復(fù)雜,這樣做無異于舍本求末。

以上就是Python如何定義接口和抽象類的詳細(xì)內(nèi)容,更多關(guān)于Python定義接口和抽象類的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 能直接看的一级欧美毛片 | 中文字幕一区二区在线观看 | 搞黄网站免费观看 | 国产亚洲欧美日韩国产片 | 三级视频网站在线观看 | 欧美一区在线观看视频 | 九草在线视频 | 国内精品久久久久久影院老狼 | 国产成人综合在线 | 亚洲免费视频网站 | 丰满寡妇一级毛片 | 99re久久资源最新地址 | 国产成人最新毛片基地 | 国产高清区 | 一区二区在线播放福利视频 | 久在线观看 | 国产精品偷伦费观看 | 免费网站18| 欧美一区二区三区在线 | 亚洲精品久久99久久 | 久久精品成人欧美大片免费 | 久久久成人网 | 特级欧美视频aaaaaa | 国产伦理久久精品久久久久 | 黄色片三级网站 | 免费亚洲网站 | 99精彩视频| 91无毒不卡 | 女初高中福利视频在线观看 | 久久久久久网址 | 女人毛片a毛片久久人人 | 国产91色综合久久免费 | 怡红院在线视频观看 | 久久国产成人福利播放 | 日韩黄色免费观看 | 欧美日韩一区二区在线 | 久久亚洲精品一区成人 | 日韩国产中文字幕 | 99九九国产精品免费视频 | 精品国产一区二区三区成人 | 日韩成人中文字幕 |