Python抽象类的新写法
作者:junjie 发布时间:2022-12-04 13:39:38
标签:Python,抽象类,写法
记得之前learn python一书里面,因为当时没有官方支持,只能通过hack的方式实现抽象方法,具体如下 最简单的写法
class MyCls():
def foo(self):
print('method no implement')
运行的例子
>>> a = MyCls()
>>> a.foo()
method no implement
>>>
这样虽然可以用,但是提示不明显,还是容易误用,当然,还有更好的方法 较为可以接受的写法
class MyCls():
def foo(self):
raise Exception('no implement exception', 'foo method need implement')
一个简单的用例
>>> a = MyCls()
>>> a.foo()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "<clipboard>", line 3, in foo
Exception: ('no implement exception', 'foo method need implement')
这就是2.7之前的写法了,2.7给了我们新的支持方法!abc模块(abstruct base class),这个在py3k中已经实现,算是back port吧。
我们来看看新的写法
from abc import ABCMeta
from abc import ABCMeta,abstractmethod
class Foo():
__metaclass__ = ABCMeta
@abstractmethod
def bar(self):
pass
运行效果
>>> class B(Foo):
... def bar(self):
... pass
...
>>> B()
<__main__.B object at 0x02EE7B50>
>>> B().bar()
>>> class C(Foo):
... pass
...
>>> C().bar()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: Can't instantiate abstract class C with abstract methods bar
>>>


猜你喜欢
- Python在很大程度上可以对shell脚本进行替代。笔者一般单行命令用shell,复杂点的多行操作就直接用Python了。这篇文章就归纳一
- pandas官方文档:https://pandas.pydata.org/pandas-docs/stable/?v=20190307135
- 1:下载FCKEditor编辑器下载下来后解压到你网站的目录,最好就放在根目录下,文件夹名字就用FCKEditor;这里可以随便自己喜好,但
- python 利用pywifi模块实现连接网络破解wifi密码实时监控网络,具体内容如下:import pywififrom pywifi
- 本文实例讲述了Python可变和不可变、类的私有属性。分享给大家供大家参考,具体如下:可变和不可变items = []print(id(li
- 参考阅读:https://www.jb51.net/article/169285.htm代码:set objTTS = createobje
- 1、手动调参,但这种方法依赖于大量的经验,而且比较费时。许多情况下,工程师依靠试错法手工调整超参数进行优化,有经验的工程师可以在很大程度上判
- 前言在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便
- 简洁优雅的 C 写法:int a = 1; int b = 2; int temp; temp = a;&nb
- 求0到1之间的随机数使用random模块中的random()函数,作用就是返回一个[0,1)之间的随机数。import randomprin
- 接触pandas之后感觉它的很多功能似乎跟numpy有一定的重复,尤其是各种运算。不过,简单的了解之后发现在数据管理上pandas有着更为丰
- 问题我们需要以某种对齐方式将文本做格式化处理。解决方案对于基本的字符串对齐要求,可以使用字符串的ljust()、rjust()和center
- 1、字符串拼接通过+运算符现有字符串码农飞哥好,,要求将字符串码农飞哥牛逼拼接到其后面,生成新的字符串码农飞哥好,码农飞哥牛逼举个例子:st
- 导语今天就给大家带来个语言识别跟语言赚文字的小工具感兴趣的铁汁萌可以往下滑了1.直接使用在1.2官网注册后拿到APISecret和APIKe
- 为了降低用户注册难度,国际站的主注册表单一直在改进。主注册三月至今发生了两次较大的变化,现在对表单调整的地方分解如下:1. 两步
- php循环输出26个大小写英文字母for($i=65;$i<91;$i++){ echo strtolower(chr($
- 前言这一期我们继续完善我们的魔塔小游戏。废话不多说,让我们愉快地开始吧~开发工具Python版本: 3.7.4相关模块:cpgam
- 本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下:这里演示读写数据库并在窗体(Form)中显示其数
- 介绍职责链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将
- 本文实例讲述了Python根据区号生成手机号码的方法。分享给大家供大家参考。具体实现方法如下:# _*_ coding:utf-8 _*_#