python abc模块,Python -- abc module

 2023-09-23 阅读 18 评论 0

摘要:1.ABC模块作用 Python本身不提供抽象类和接口机制,想要实现抽象类,可以借助abc模块。ABC是Abstract Base Class的缩写,是用来定义抽象类的,具体的介绍请参考PEP 3119。 2.模块中的类和函数介绍 abc.ABCMeta,用来生成抽象基础类的元类。由

1.ABC模块作用

Python本身不提供抽象类和接口机制,想要实现抽象类,可以借助abc模块。ABC是Abstract Base Class的缩写,是用来定义抽象类的,具体的介绍请参考PEP 3119

2.模块中的类和函数介绍

abc.ABCMeta,用来生成抽象基础类的元类。由它生成的类可以被直接继承。

register首先注册一个abc的虚拟子类

    from abc import ABCMeta class MyABC: __metaclass__ = ABCMeta MyABC.register(tuple) assert issubclass(tuple, MyABC) assert isinstance((), MyABC) 

上面这个例子中,首先生成了一个MyABC的抽象基础类,然后再将tuple变成它的虚拟子类。然后通过issubclass或者isinstance都可以判断出tuple是不是出于MyABC类。

python abc模块。检查子类是否被确认为ABC的子类。你也可以自己定制一个issubclass方法,这样就不需要再调用register()了。这个方法可以返回Ture,False或NotImplemented。如果返回的是TRUE,这个子类就被认为是ABC的子类了。如果返回FALSE,这个子类就不被认为是ABC的子类。如果是NotImplemented 请检查 子类的继承关系和语法。也可以通过复写__subclasshook__(subclass)来实现相同功能,它必须是classmethod。

下面是一个实用的例子:

    class Foo(object): def __getitem__(self, index): ... def __len__(self): ... def get_iterator(self): return iter(self) class MyIterable: __metaclass__ = ABCMeta @abstractmethod def __iter__(self): while False: yield None def get_iterator(self): return self.__iter__() @classmethod def __subclasshook__(cls, C): if cls is MyIterable: if any("__iter__" in B.__dict__ for B in C.__mro__): return True return NotImplemented MyIterable.register(Foo) 

abc.abstractmethod(function),表明抽象方法的生成器

class classname:__metaclass__ = ABCMeta@abstractmethoddef __my_abstract_method__(self):...

abc.abstractproperty([fget[,fset[,fdel[,doc]]]]),表明一个抽象属性

class classname:__metaclass__ = ABCMeta@abstractpropertydef my_abstract_property(self):...

上例只是只读属性,如果是读写属性,可以如下:

python module、 

转载于:https://my.oschina.net/u/2272631/blog/896606

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/89761.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息