山东时时彩官方开奖

您现在的位置是:网站首页> 内容页

Python抽象类(abc模块)

  • 皇家88登录手机版
  • 2019-10-28
  • 74人已阅读
简介1.抽象类概念抽象类是一个特殊的类,只能被继承,不能实例化2.为什么要有抽象类其实在未接触抽象类概念时,我们可以构造香蕉、苹果、梨之类的类,然后让它们继承水果这个的基类,水果的基类包含

1.抽象类概念

抽象类是一个特殊的类,只能被继承,不能实例化

2.为什么要有抽象类

其实在未接触抽象类概念时,我们可以构造香蕉、苹果、梨之类的类,然后让它们继承水果这个的基类,水果的基类包含一个eat函数。

但是你有没有想过,我们可以将香蕉、苹果、梨实例化,去吃香蕉、苹果、梨。但是我们却不能将水果实例化,因为我们无法吃到叫水果的这个东西。

所以抽象类中只能有抽象方法(没有实现功能),该类不能?#30343;?#20363;化,只能被继承,且子类必须实现抽象方法。

3.抽象类的作用

在不同的模块中通过抽象基类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依?#30331;?#26224;简单。

抽象类的编程,让每个人可以关注当前抽象类的方法和描述,而不需要考虑过多的实现细节,这对协同开发有很大意义,也?#20040;?#30721;可读性更高。

4.抽象类的使用

import abc # 利用abc模块实现抽象类class File(metaclass=abc.ABCMeta): # abc.ABCMeta是实现抽象类的一个基础类 @abc.abstractmethod # 定义抽象方法,无需实现功能 def read(self): passclass Txt(File): # 子类继承抽象类,但是必须定义read方法将抽象类中的read方法覆盖 def read(self): print("文本数据的读取方法")txt1 = Txt()txt1.read() txt2 = File()txt2.read()

运行结果如下

文本数据的读取方法Traceback (most recent call last): File "E:/python/ftp_work/test.py", line 20, in <module> txt2 = File()TypeError: Can"t instantiate abstract class File with abstract methods read

显然将抽象类实例化报错了,得到了我们想要的结果

5.abc模块在Python2&3的兼容问题

为解决兼容性问题,我们需要引入six模块

通用做法。@six.add_metaclass(MetaClass) 的作用是在不同版本的Python之间提供一个优雅的声明类的metaclass的手段,事实上不用它也可以,?#30343;?#20351;用了它代码更为整洁明了。import [email protected]_metaclass(Meta)class MyClass(object):????pass
在Python 3 等价于import six?class MyClass(object, metaclass = Meta):????pass
在Python 2.x (x >= 6)中等价于import six?class MyClass(object):????__metaclass__ = Meta????pass
或者直接调用装饰器,这里也能看出来装饰器就是个方法包装而已。import six?class MyClass(object):????passMyClass??= six.add_metaclass(Meta)(MyClass)

文章评论

Top 山东时时彩官方开奖
微乐龙江游戏手机版 p3试机号近10期彩吧 棋牌游戏漏洞和技巧 澳门金沙线上娱乐网站 广西柳州麻将下载安装 贵州快33 黑龙江11选5数据 排列5玩法及中奖规则 大众麻将玩法胡牌 福建快三走势图快