Python的功能模块[2] -> abc -> 利用 abc 建立抽象基类

abc模块 / abc Module



在定义抽象方法时,为了在初始化阶段就检测是否对抽象方法进行了重定义,Python 提供了 abc 模块。

 1 from abc import ABCMeta, abstractmethod
 2
 3 # Generate a abstract base obj - MyABC
 4 class MyABC(metaclass=ABCMeta):
 5     #__metaclass__ = ABCMeta
 6     @abstractmethod
 7     def run(self):
 8         pass
 9
10 class Foo(MyABC):
11     def run(self):
12         print(‘run‘)
13
14 f = Foo()
15 f.run()

第 4 行:生成一个抽象的基类 MyABC,这其中利用了 metaclass 元类的相关用法

第 6-7 行:抽象方法装饰器,抽象方法可以不执行任何程序,但是子类中必须重定义这个函数

第 10 行:定义 MyABC 的子类 Foo,此时若 Foo 中没有定义 run 方法,则在运行前便会产生报错,而不是等到运行后才报错

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

相关阅读



1. 抽象方法
2. 装饰器

参考链接



http://blog.csdn.net/igorzhang/article/details/39026885

原文地址:https://www.cnblogs.com/stacklike/p/8116713.html

时间: 2024-10-16 03:07:49

Python的功能模块[2] -> abc -> 利用 abc 建立抽象基类的相关文章

Python 接口:从协议到抽象基类

抽象基类的常见用途:实现接口时作为超类使用.然后,说明抽象基类如何检查具体子类是否符合接口定义,以及如何使用注册机制声明一个类实现了某个接口,而不进行子类化操作.最后,说明如何让抽象基类自动“识别”任何符合接口的类——不进行子类化或注册. Python文化中的接口和协议 接口在动态类型语言中是怎么运作的呢?首先,基本的事实是,Python语言没有 interface 关键字,而且除了抽象基类,每个类都有接口:类实现或继承的公开属性(方法或数据属性),包括特殊方法,如__getitem__ 或 _

python 抽象基类(abc)

设置ABCMeta元类 抽象类是一类用于继承,但是无需实现具体方法的类,它会创建一些子类必须实现的方法签名.抽象类在定义和强制类抽象方面非常有用,它类似于其他变成语言里面的接口概念,无需实现具体方法. 从概念上来讲,有一种实现抽象类的方式是对类方法进行存根,然后在类方法被访问的时候直接抛出NotImplementedError异常.这样可以防止子类在没有重写类方法之前直接访问父类的类方法. 像这样: class Fruit: def check_ripeness(self): raise Not

python(七):元类与抽象基类

一.实例创建 在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的.python3默认创建的类是继承了object. class A(object): def __init__(self, *args, **kwargs): self.name, self.age, self.gender = args[:3] def __new__(cls, *args, **kwargs): print("__new__ has called.

流畅python学习笔记:第十一章:抽象基类

__getitem__实现可迭代对象.要将一个对象变成一个可迭代的对象,通常都要实现__iter__.但是如果没有__iter__的话,实现了__getitem__也可以实现迭代.我们还是用第一章扑克牌的例子来看下 class FrenchDeck:     ranks=[str(n) for n in range(2,11)] + list('JQKA')     suits='spades diamonds clubs hearts'.split()     def __init__(sel

Python基础教程笔记——第7章:更加抽象(类)

下面进入Python的面向对象: 对象的魔力: 多态:---可以对不同类的对象使用同样的操作 封装:---对外部隐藏对象内部的工作方式 继承:---以普通的类为基础建立专门的类对象 (1)多态: isinstance(...) isinstance(object, class-or-type-or-tuple) -> bool   检查object的类型 isinstance(object, tuple) 检查是否为元组 绑定到对象上的函数称为方法   例如>>> [1,2,'a'

python 用abc模块构建抽象基类Abstract Base Classes

见代码: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2018/08/01 16:58 4 from abc import ABCMeta, abstractmethod 5 6 7 class SClass(object): 8 __metaclass__ = ABCMeta 9 10 @abstractmethod 11 def my_print(self): 12 pass 13 14 15 class C0C

Python的功能模块[1] -> struct -> struct 在网络编程中的使用

struct模块 / struct Module 在网络编程中,利用 socket 进行通信时,常常会用到 struct 模块,在网络通信中,大多数传递的数据以二进制流(binary data)存在.传递字符串时无需过多担心,但传递 int,char 之类的基本数据时,就需要一种机制将某些特定的结构体类型打包成二进制流的字符串,然后在进行网络传输,而接收端也可以通过某种机制进行解包还原出原始数据.struct 模块便提供了这种机制,该模块主要作用就是对 python 基本类型值与用 python

Python的功能模块[3] -> binascii -> 编码转换

binascii模块 / binascii Module binascii模块包含很多在二进制和 ASCII 编码的二进制表示之间的转换方法.关于进制转换可以参考一些内置函数. hexlify 与 unhexlify >>> import binascii >>> a = 'hello world' >>> b = binascii.b2a_hex(a) Traceback (most recent call last): File "<

设计模式-Template(行为模式) 采用 继承的方式 将算法封装在抽象基类中,在子类中实现细节。利用面向对象中的多态实现算法实现细节和高层接口的松耦合。

以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Template.h class AbstractClass { public: virtual ~AbstractClass(); void TemplateMethod(); protected: virtual void PrimitiveOperation1() = 0; virtual void PrimitiveOperation2() = 0; AbstractClass(); private: }; c