遍历Python中给定类的对象实例 [英] Iterating over object instances of a given class in Python

查看:535
本文介绍了遍历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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆