python: make a class object iterable
本问题已经有最佳答案,请猛点这里访问。
我想做的是:我创建了一个classmethod,它返回
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @classmethod def make_attr(cls, **kwargs): """ code: do something, generate either a tuple """ if : data = {} """ add k, v in data """ return cls(**data) else: data = [] for k, v in kwargs.items(): _d = {} _d[k] = v data.append(_d) return cls(*data) |
代码如上,我遇到的问题是,如果classmethod返回dict的object,我可以用
1 2 3 4 5 6 7 8 9 10 11 | >> result = Class.make_attr(login_name="test") >> print("age:", result.age) >> age: 25 >> result = Class.make_attr() >> print(result) >> <model._class.Class object at 0x104020358> >> for i in result: >> print(i) >> TypeError: 'Class' object is not iterable |
那么,我如何才能使这个对象不可更改呢?
我终于找到了解决问题的方法,在我的类中添加了内置方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Class: def __init__(self, *args, **kwargs): self.start = 0 self.end = args def __iter__(self): return self def __next__(self): if self.start >= len(self.end): raise StopIteration else: self.start += 1 return self.end[self.start-1] |
再次感谢@ducminh