@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 ...
随机推荐
- Go_file操作
1. FileInfo package main import ( "os" "fmt" ) func main() { /* FileInfo:文件信息 in ...
- 转载:WAV header
转自:http://www.cnblogs.com/CoderTian/p/6657844.html WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource I ...
- JS-禁用浏览器前进后退
使用jQuery: <script type="text/javascript" language="javascript"> $(document ...
- finalize()
本文介绍的是Java里一个内建的概念,Finalizer.你可能对它对数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了.在java.lang.Obje ...
- java ArrayList添加元素全部一样
#开始 今天遇到了一个很神奇的事情 也即是我在用ArrayList的add方法循环加入对象的时候 发现添加的元素全部都是一样的 定位错误定位了一个下午.... 错误位置就是哪一个位置 但是就是不知道为 ...
- Mybatis空指针
查询数据,返回的字段要在 resultMap 中定义, <resultMap id="BaseResultMap" type="com...." > ...
- netty(三)---NioEventLoop分析
问题 : NioEventLoop 作用到底是什么?是在哪里用到的? NioEventLoop 和我们开头创建的 ServerBootstrap 和 EventLoopGroup 是什么关系 ? Ni ...
- gitlab的搭建与汉化
gitlab的搭建:内存最好2G以上 yum -y install curl unzip policycoreutils git wget 安装相关依赖包 所有gitlab rpm包的 ...
- POJ 2142 The Balance(exgcd)
嗯... 题目链接:http://poj.org/problem?id=2142 AC代码: #include<cstdio> #include<iostream> using ...
- HTML中的meta元素
<meta>元素必须放在<head>标记内,而且必须写在HTML文件前1024B之内 <meta>元素的主要目的是提供有关这份HTML文件的相关信息.例如编码方式, ...