簡體   English   中英

在Python中迭代給定類的對象實例

[英]Iterating over object instances of a given class in Python

給定一個保持其對象注冊表的類:

class Person(object):
   __registry = []

   def __init__(self, name):
       self.__registry.append(self)
       self.name = name

如何使以下代碼工作(不使用Person .__注冊表):

for personobject in Person:
    print personobject

在研究的過程中,我發現了一個提示,可以使用__getitem__ -method獲取__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以便更容易從元類訪問)。 然后,

>>> p = Person('John')
>>> p2 = Person('Mary')
>>> for personobject in Person:
...     print personobject
...
<person.Person object at 0x70410>
<person.Person object at 0x70250>

首先,不要使用雙__名稱。 它們保留供Python使用。 如果你想“私人”使用單_

其次,保持這種事情盡可能簡單。 不要在復雜的事情上浪費大量的時間和精力。 這是一個簡單的問題,讓代碼盡可能簡單,以完成工作。

class Person(object):
    _registry = []

    def __init__(self, name):
        self._registry.append(self)
        self.name = name

for p in Person._registry:
    print p

你可以用:

for item in Person.__registry:
    print(item)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM