[英]Iterating over object instances of a given class in Python and sys.getrefcount
[英]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.