@implementer,抽象类,接口
@implementer,抽象类,接口
1. implementer
在看twisted源码时,经常出现@implementer(IReactorFDSet)
它来自zope.interface,提供了接口的实现。
理论上,它要提供一个约束要求子类必需实现装饰器中类的方法。
然而,但是,跑了一下,发现这个实现是不完全的,即便子类没有重写接口的方法,也不会报错。
# zope implementer装饰器使用
from zope.interface import Interface
from zope.interface.declarations import implementer
# 定义接口
class MyMiss(Interface):
def imissyouatlost(self,miss):
"""Say
i miss you at lost to miss"""
@implementer(MyMiss) # 继承接口
class Miss:
def imissyouatlostx(self,somebody):
"""Say
i miss you at lost to somebody"""
return "i
miss you at lost, %s!" % somebody
if __name__ == '__main__':
z = Miss()
hi = z.imissyouatlostx('Zy')
print(hi)
输出:没有异常。
它提供了两个函数implementedBy和providedBy来检测子类是否重写了接口的方法。
好像也没有什么用。
暂时不管它
参考文档:
https://www.cnblogs.com/imyalost/p/8598343.html
https://blog.csdn.net/vinrex/article/details/38118547
https://www.cnblogs.com/bjdxy/p/3182142.html
2.
抽象类
抽象类基于类抽象而来,主要用于被继承,约束子类实现抽象方法,实现归一化设计。一般不实例化抽象类。
在面向对象编程语言中,大多提供了接口(interface)的概念。接口在编程语言中指的是一个抽象类型,是抽象方法的集合;它的特点如下:
1、类通过继承接口的方式,来继承接口的抽象方法;
2、接口并不是类(虽然编写类和方法的方式很相似);
3、类描述对象的属性和方法(实现接口的类,必须实现接口内所描述的所有方法,否则必须声明为抽象类);
4、接口包含类要实现的方法(接口无法被实例化,但可以被实现);
总结:接口只定义规范,不负责具体实现(具体实现由具体的实现者完成)!
2.1.
使用abc模块实现抽象类。
import abc
class A(metaclass=abc.ABCMeta): # 指定元类
@abc.abstractmethod # 定义抽象方法,无需实现功能
def abstract_method(self):
"""子类必须定义该方法"""
pass
# class B(A):
# pass
# b=B() #TypeError: Can't instantiate abstract class Txt with abstract methods
class B(A): # 子类继承抽象类,必须定义抽象方法
def abstract_methodx(self):
print('抽象方法')
b = B()
b.abstract_method() # 抽象方法
这里使用了装饰器@abc.abstractmethod
它的作用是检查被装饰类中必需实现给定的方法。
在这里的效果是类B中必需实现A中的方法,否则会抛出异常TypeError。
Traceback (most recent call last):
File "E:/python/code test/temp.py", line 65, in <module>
b
= B()
TypeError: Can't instantiate abstract class
B with abstract methods abstract_method
注意,上例中在B类的方法后添加了一个X,方法名不一样了。
当然,直接pass也可以,结果是一致的。
@implementer,抽象类,接口的更多相关文章
- 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait
[源码下载] 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait 作者:webabcd 介绍速战速决 之 PHP 类基础 抽象类 接口 trait 示例1.类的相关知识点 1(基础 ...
- python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)
一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...
- “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 面向对象 继承 抽象类 接口 static 权限修饰符
Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...
- python day - 19 抽象类 接口类 多态 封装
一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...
- C# 你什么让程序员寂寞成酱紫 (男生版 娱乐中学习 抽象类 接口 继承 实现方法 )
你什么让程序员寂寞成酱紫 (男生版 娱乐中学习 抽象类 接口 继承 实现方法 ) 一个家庭 相当于 一个空间,这个空间里 有 很多元素,比如 爱,爱这个抽象事物,可能有很多动作,接吻.交流,对于一 ...
- 13. 抽象类 & 接口
一.抽象类 // 抽象类Shape public abstract class Shape { // 1. 成员变量 private String color; // 2. 初始化块 { System ...
- 面向对象的理解 抽象类&接口
一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu ...
随机推荐
- 设置idea的快捷键组合 设置为默认
ubuntu中,idea的快捷键组合 为 “Default for GNOME”,和windows中不一样了,需要修改为“Default”:
- allegro 16.6 铜皮显示问题
Setup-->User Preference-->display-->opengl-->staic-shapes_fill_solid打勾.可以将栅格铜皮改为实铜, Setu ...
- 分布式事务 --- BASE 理论
部分图片总结出自参考资料 问题 : Base 理论为什么会被提出,动机是什么 Base 和 ACID 的区别与联系 概述 上一篇我们知道CAP 理论,也知道由于现实中网络等原因,分区容错性这一元素大多 ...
- dfs(迷宫)
问题 J: 棋盘行走 时间限制: 1 Sec 内存限制: 128 MB[命题人:admin] 题目描述 小Biu在玩一个棋盘游戏,这个游戏给出一个n*m的棋盘,并且每个点上有一个棋子,棋子的颜色 用 ...
- idea 快捷使用(三)中断Debug的使用
想要在Debug的时候,中断请求,不要再走剩余的流程了? 不需要关闭服务重新启动程序,可以通过Force Return,即强制返回来避免后续的流程. 点击Force Return,弹出Return V ...
- 架设传奇时打开DBC数据库出错或读取DBC失败解决方法
架设传奇时打开DBC数据库出错或读取DBC失败解决方法 DBC右键-属性-高级-管理员身份运行 即可
- hadoop中block副本的放置策略
下面的这种是针对于塔式服务器的副本的放置策略
- SQL Server 2014数据库开启远程连接(Windows Server 2016)
1.打开SQL SERVER 配置管理器 2. 设置防火墙的入站规则 3.使用Navicat Premium连接SQL Server
- vagrant up 报VirtualBox错误
Debug output $ $ vagrant.exe up ==> default: Checking if box 'janihur/ubuntu-1404-desktop' is up ...
- php编译安装扩展redis及swoole
一.安装redis扩展 下载redis扩展包以及解压 wget https://github.com/edtechd/phpredis/archive/php7.zip unzip php7.zip ...