Python abc模块的几个小知识点
2017-08-12 10:31
411 查看
编程的思想应该在不断地实践中才能够体悟,这是我自己的感受。接触了好长一段时间的OOP,但是一直在实战中用到的很少。或许,平时我需要的仅仅是一些小脚本而已。今天总结一下学习Python OOP遇到的一个小模块,abc。
首先需要了解的是一个基类,abc.ABCMeta。最初看到与之相关的代码,我还把这个理解为了一个参数。这让我在读代码的时候有点不理解。查了一下文档,恍然大悟。原来,这个是用于实现抽象类的一个基础类。
接下来,需要总结的是关于抽象方法的用法。在相应的方法之前一行加上@abstractmethod之后,从新的一行开始定义相应的方法。实现的方法就是一个抽象的方法,有点像Java中的接口。子类继承之后,如果需要用到的这个方法则必须用新的方法将其实现。关于这个,写一段示范代码:
import abc
from abc import *
classSClass(metaclass = abc.ABCMeta):
@abstractmethod
def my_print(self):
pass
classCClass(SClass):
pass
cc = CClass()
程序执行结果:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>pythonabstractmethod.py
Traceback (mostrecent call last):
File "abstractmethod.py", line 12,in <module>
cc = CClass()
TypeError: Can'tinstantiate abstract class CClass with abstract methods my_print
这样,如果想要能够正确进行实例化就需要对相应的抽象接口进行实现。修改代码如下:
import abc
from abc import *
classSClass(metaclass = abc.ABCMeta):
@abstractmethod
def my_print(self):
pass
classCClass(SClass):
def my_print(self):
print("my childmethod!")
cc = CClass()
程序的执行结果如下:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>pythonabstractmethod.py
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>
从上面的结果至少可以看出,这个类是可以实现实例化的。继续修改代码:
import abc
from abc import *
classSClass(metaclass = abc.ABCMeta):
@abstractmethod
def my_print(self):
pass
classCClass(SClass):
def my_print(self):
print("my childmethod!")
cc = CClass()
cc.my_print()
程序的执行结果:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>pythonabstractmethod.py
my child method!
从上面的结果就能够看出,程序运行已经正常。
首先需要了解的是一个基类,abc.ABCMeta。最初看到与之相关的代码,我还把这个理解为了一个参数。这让我在读代码的时候有点不理解。查了一下文档,恍然大悟。原来,这个是用于实现抽象类的一个基础类。
接下来,需要总结的是关于抽象方法的用法。在相应的方法之前一行加上@abstractmethod之后,从新的一行开始定义相应的方法。实现的方法就是一个抽象的方法,有点像Java中的接口。子类继承之后,如果需要用到的这个方法则必须用新的方法将其实现。关于这个,写一段示范代码:
import abc
from abc import *
classSClass(metaclass = abc.ABCMeta):
@abstractmethod
def my_print(self):
pass
classCClass(SClass):
pass
cc = CClass()
程序执行结果:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>pythonabstractmethod.py
Traceback (mostrecent call last):
File "abstractmethod.py", line 12,in <module>
cc = CClass()
TypeError: Can'tinstantiate abstract class CClass with abstract methods my_print
这样,如果想要能够正确进行实例化就需要对相应的抽象接口进行实现。修改代码如下:
import abc
from abc import *
classSClass(metaclass = abc.ABCMeta):
@abstractmethod
def my_print(self):
pass
classCClass(SClass):
def my_print(self):
print("my childmethod!")
cc = CClass()
程序的执行结果如下:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>pythonabstractmethod.py
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>
从上面的结果至少可以看出,这个类是可以实现实例化的。继续修改代码:
import abc
from abc import *
classSClass(metaclass = abc.ABCMeta):
@abstractmethod
def my_print(self):
pass
classCClass(SClass):
def my_print(self):
print("my childmethod!")
cc = CClass()
cc.my_print()
程序的执行结果:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\12>pythonabstractmethod.py
my child method!
从上面的结果就能够看出,程序运行已经正常。
相关文章推荐
- python中数字的几个小知识点
- python中函数的几个小知识点
- 【python】python re模块中几个比较重要的函数
- Python机器学习库sklearn.model_selection模块的几个方法参数
- python中的模块导入几个基本点
- Python面向对象几个知识点
- 举例详解Python中threading模块的几个常用方法
- Python面向对象几个知识点
- [转]几个python 入门程序--例2( 如何将多个模块打包成一个模块)
- python中openpyxl模块学习知识点(一)
- Python3 abc 模块
- python圣斗士修炼(十五):几个常用模块
- Python资料之abc模块
- Python os 模块知识点整理
- python笔记-re模块的几个函数使用
- 一段代码学习几个Python知识点
- Python引用模块和查找模块路径(Python重要知识点一)
- Python生成随机数与random模块中最常用的几个函数
- python abc模块
- Python的ABC模块