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

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 JPA。Eclipselink没有为mySQL提供密码,但它应该提供   我的Servlet和@FormDataParam存在java问题   java将什么作为上下文参数传递到文件I/O方法中?   如果两个值相同,java无法找到其中一个单选按钮   java在变量和方法名中使用下划线   JavaSpringMVC单线程安全?   klazz类的java Arraylist(反射Api)   java如何在数字字符串中查找最频繁的数字?   JavaAPI设计:使数据更易于阅读与强制更多API调用   JavaHadoopMapReduceforGoogleWebGraph   java无法启动gauge API:Runner意外退出   java如何在bluemix上使用ibm工作负载调度器?   拉取一年中某一周特定日期的所有日期   java为什么是我的角节点。js应用程序将图像上传到S3� 邮递员正确上传时的符号?   在不使用任何第三方jar的情况下将文件从本地传输到linux系统(java代码)   java将现有文件夹复制到Eclipse工作区中新创建的项目中   Java中的regex RegExp帮助   当使用“系统”外观时,Java组合框setSelectedItem会出现故障   JavaASM:在类的方法中获取局部变量名和值