遍历Python中给定类的对象实例

给定一个保留其对象注册表的类:

class Person(object):

__registry = []

def __init__(self, name):

self.__registry.append(self)

self.name = name

如何使以下代码工作(不使用Person .__ registry):

for personobject in Person:

print personobject

在研究过程中,我发现了一个暗示,即可以__metaclass__使用__getitem__-method方法。有什么想法吗?

回答:

您可以使用简单的元类使您的类对象可迭代。

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以使其更容易从元类访问)。然后,

>>> p = Person('John')

>>> p2 = Person('Mary')

>>> for personobject in Person:

... print personobject

...

<person.Person object at 0x70410>

<person.Person object at 0x70250>

以上是 遍历Python中给定类的对象实例 的全部内容, 来源链接: utcz.com/qa/402814.html

回到顶部