将迭代器的动态接口添加到类

IteratorDecorator的Python项目详细描述


https://travis-ci.org/stovorov/IteratorDecorator.svg?branch=masterhttps://codecov.io/gh/stovorov/IteratorDecorator/branch/master/graph/badge.svg

迭代器

在python中实现迭代器并不复杂,尽管缺少的是使它甚至 更容易的。这个小库添加了iter_attributedecorator,允许快速选择iterable 将实现迭代器。

要求

Python3.5+

示例

fromIteratorDecoratorimportiter_attribute@iter_attribute('number')classCaseClass:def__init__(self):self.number=[1,2,3,4]self.attr=['attr1','attr2','attr3']obj=CaseClass()fornuminobj:print(num)

安装

在您的虚拟机中,只需拨打电话:

$ pip install IteratorDecorator

警告

当使用pycharm或mypy时,您可能会看到修饰类没有被识别为迭代器的问题。 这是一个我还无法克服的问题,可能是因为对物体的解释 是静态的而不是动态的。mypy检查类代码中方法的定义 运行时更改因为__iter____next__是动态添加的,所以mypy找不到那些 在创建类的对象之前在对象中定义。解决此问题的可能方法是:

  1. 在类中定义__iter__方法:
@iter_attribute('attr')classTest:def__init__(self)->None:self.attr=[1,2,3]def__iter__(self)->'Test':returnself

实际上,它不必是“real”__iter__,因为它将被decorator实现替换,但是 该定义仅用于静态检查程序。

  1. 创建对象后,使用cast或assert函数表示特定实例继承
fromcollections.Iterator:assertisinstance(my_object,collections.Iterator)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从Struts操作的钩子更改表单值(Liferay 6.2)   java如何改变Spring MVC处理url“点”字符的行为   Clojure中使用Java接口的问题   junit如何模拟comosDB azure java集成客户端?   运行函数时发生java错误   netbeans Java。jar文件和依赖项   Eclipse中文本字段中的java输入类型   在JAVA中,将集合变量从实时批处理运行时传递到调用批处理文件   java通过Bean验证API中的自定义消息管理异常   XML到json的转换,在Java中,同时保留数据类型   根据JAVA中的列名从Excel文件中获取单元格值   在AsyncTask的doInBackground中未调用java FirebaseMessagingService   java如何在数据库中插入一行?