将迭代器的动态接口添加到类
IteratorDecorator的Python项目详细描述
迭代器
在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找不到那些 在创建类的对象之前在对象中定义。解决此问题的可能方法是:
- 在类中定义__iter__方法:
@iter_attribute('attr')classTest:def__init__(self)->None:self.attr=[1,2,3]def__iter__(self)->'Test':returnself
实际上,它不必是“real”__iter__,因为它将被decorator实现替换,但是 该定义仅用于静态检查程序。
- 创建对象后,使用cast或assert函数表示特定实例继承
fromcollections.Iterator:assertisinstance(my_object,collections.Iterator)