遍历Python中给定类的对象实例 [英] Iterating over object instances of a given class in Python
本文介绍了遍历Python中给定类的对象实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出一个保留其对象注册表的类:
Given a class that keeps a registry of its Objects:
class Person(object):
__registry = []
def __init__(self, name):
self.__registry.append(self)
self.name = name
如何使以下代码工作(不使用Person .__ registry):
How would I make the following code work (without using Person.__registry):
for personobject in Person:
print personobject
在研究的过程中,我发现了一个暗示,即可以使用__getitem__
方法使用__metaclass__
.有什么想法吗?
While researching I found a hint that one could go for a __metaclass__
with a __getitem__
-method. Any ideas how this would look like?
推荐答案
您可以使用简单的元类使您的类对象可迭代.
You can make your class object iterable with a simple metaclass.
class IterRegistry(type):
def __iter__(cls):
return iter(cls._registry)
class Person(object):
__metaclass__ = IterRegistry
_registry = []
def __init__(self, name):
self._registry.append(self)
self.name = name
(我也将__registry
更改为_registry
,以便更轻松地从元类访问).
然后,
(I have also changed __registry
to _registry
to make it easier to access from the metaclass).
Then,
>>> p = Person('John')
>>> p2 = Person('Mary')
>>> for personobject in Person:
... print personobject
...
<person.Person object at 0x70410>
<person.Person object at 0x70250>
这篇关于遍历Python中给定类的对象实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文