2011-08-30 129 views
0

例如:如何枚舉所有對象並獲取它們的屬性?

obj1 = ClassName() 
obj1.name = "name1" 
obj2 = ClassName() 
obj2.name = "name2" 
obj3 = ClassName() 
obj3.name = "name3" 
obj4 = ClassName() 
obj4.name = "name4" 

,我們有靜態變量返回的對象的數量: ClassName.counter

如何我能得到obj1.name,obj2.name等,但如果對象計數可能是動態的(例如使用循環)?

PS:更好的如果你能說我如何在python中做到這一點,但只有設計也會很好。

+0

如何使用其中的單個對象的列表/代詞而不是靜態變量名稱obj1,obj2等 – eumiro

+0

obj [1-X]這不是靜態變量,它是類的對象ClassName – alterpub

回答

1

那麼......實際上不建議這樣做,這種類型的工作人員,有點難以理解,容易出錯。 ..但是,你可以這樣做:

class MyClass(object): 
    names_list = [] 
    _name = None 

    def get_name(self): 
     return self._name 
    def set_name(self, name): 
     assert self._name is None 
     self._name = name 
     self.names_list.append(name) 
    name = property(get_name, set_name) 

obj1 = MyClass() 
obj1.name = 'name1' 

obj2 = MyClass() 
obj2.name = 'name2' 

print obj1.names_list 
print len(obj1.names_list) 

它的工作原理。它很醜。使用一些外部工廠來處理它可能會好很多。如果你想存儲鏈接到現有的實例,一些帶有weakrefs的數組/字典可能是一個很好的解決方案。

+0

This是最好的變體,thx你! – alterpub

+0

如何從names_list中刪除信息時,我將使用: del obj2? – alterpub

2

您可以使用Factory類,即處理創建和存儲ClassName對象的對象。然後你可以很容易地訪問Factory類中的不同ClassName s類(它必須是一個單例)