zope.interface

在看twisted源码时,经常出现zope.interface这个包,网上查了一下,是提供一个接口的实现。不是很懂接口是什么东西,查了一下,大概就是说“定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有什么方法,接口中不能任何功能代码”,这个东西是从java里来的,没有学过java,C++也忘得差不多了,好像有个虚基类什么的有点关系。反正就是大概个这么个东西。
具体可以看
python接口
总结一下大概是:
1.自己不能实例化
2.接口里的定义函数没有过程,且必须被继承的子类重写
而抽象类,就是既可以定义属于自己的方法,也可以写约束子类的方法(“包含抽象方法的类叫做抽象类。抽象方法:这种方法是不完整的,仅有生命而没有方法体。声明语法:abstract void f():”《Java编程思想》)
抽象类的作用:1.使类的抽象性明确起来,说明使用方法。2.方便重构

python可以通过一个zope.interface包“实现”接口的功能
首先基类继承Interface类,然后子类不继承任何类,用类装饰器@implementer()装饰
zope.interface使用
但是,我跑了一下,发现这个实现是不完全的,即使你子类没有重写接口的方法,python自身也不会报错,但是它提供了两个函数implementedBy和providedBy来检测子类是否重写了接口的方法
例子1
例子2
继续查看文档zope.interface文档,还有个基类Attribute是来给接口里的属性声明用的。文档中还描述了通常的接口实现(居然不是使用装饰器)以及验证接口的方法
最常用的接口实现方法:

>>> class Foo:
...     zope.interface.implements(IFoo)
...
...     def __init__(self, x=None):
...         self.x = x
...
...     def bar(self, q, r=None):
...         return q, r, self.x
...
...     def __repr__(self):
...         return "Foo(%s)" % self.x

zope包里的adaptor就不知道是干什么用的了
另外有一个web框架叫Zope,注意这里的首字母Z是大写的,这个东西和zope.interface是两个东西

猜你喜欢

转载自blog.csdn.net/kekefen01/article/details/82903145