gpt4 book ai didi

python - 迭代 ITERABLE 类的实例

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:02 25 4
gpt4 key购买 nike

我定义了下面的类

class Person(object):        
_counter = 0
_instances = []

def __init__(self, nam):
self.name = nam
self._instances.append(self)
self._id = Person._counter + 1
Person._counter+=1

def __repr__(self):
return f'{self._id} : Person({self.name})'

def __iter__(self):
return self

def __next__(self):
pass

@classmethod
def iterate(cls):
return [p for p in Person._instances]

我可以迭代这个类的实例

[p for p in Person._instances]

我想了解如何通过调用获得相同的结果

[p for p in Person]

我搜索了许多类似的问题,并尝试了几个建议的答案,但都没有成功。我正在使用 Python 3.6 Anaconda x64,在我在解释器上测试的所有解决方案中,我都回来了

  [p for p in Person]
TypeError: 'type' object is not iterable

您能否准确写下我如何成功执行此 [p for p in Person] 调用以取回与 Person.iterate() 和 Person._instances 相同的列表?

最佳答案

您可以在元类上定义一个 __iter__ 以使元类实例(即 Person)可迭代:

class metaclass(type):
def __iter__(cls):
return iter(getattr(cls, '_instances', []))

class Person(metaclass=metaclass):
# __metaclass__ = metaclass Python 2
...

关于python - 迭代 ITERABLE 类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com