通过添加
__iter__()方法使您的类型可迭代。琐碎地:
class Example: def __init__(self): self.a = 1 self.b = 2 def __iter__(self): yield "a", self.a yield "b", self.b
这产生了一个包含名称/值对的元组序列,
dict()很高兴使用。
dict(Example()) # {'a': 1, 'b': 2}
当然,在那里有很多重复的话题。因此,您可以改写
__iter__()以使用预定义的属性列表:
def __iter__(self): names = "a", "b" for name in names: yield name, getattr(self, name)
您还可以让它对实例中的 所有 属性进行内部检查,而忽略其值可调用的属性:
def __iter__(self): names = dir(self) for name in names: value = getattr(self, name) if not callable(value): yield name, value
还是让它从实例的
__dict__属性中产生,该实例的属性仅包含直接存储在实例上的属性(上述
dir()方法还可以找到继承的属性):
def __iter__(self): yield from self.__dict__.items()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)