遍历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