2010-07-05 72 views
11

如何在Python中創建對象列表(類實例)?在Python中創建對象列表

或者這是不好的設計的結果?我需要這個原因,我有不同的對象,我需要在稍後階段處理它們,所以我會繼續將它們添加到列表中並稍後調用它們。

+2

你的意思是類型對象的列表('[type(x),...]')或類的實例('[1,2,3]')? – Skurmedel 2010-07-05 21:12:18

+0

@Skurmedel:類實例。我的問題:) – user225312 2010-07-06 05:07:46

+0

@Alfred提到它具體是:嘿嘿,我只是覺得類實例有點曖昧,但我明白你的意思了通過選擇的答案:P – Skurmedel 2010-07-06 11:29:51

回答

32

存儲對象實例的列表很簡單

class MyClass(object): 
    def __init__(self, number): 
     self.number = number 

my_objects = [] 

for i in range(100): 
    my_objects.append(MyClass(i)) 

# later 

for obj in my_objects: 
    print obj.number 
+0

在那裏你在第一行通過「對象」,是一個實際的對象還是一個表示對象實例的編號的數字? 如果我寫 my_objects(1), 我會打電話來的第一個對象,但我不認爲1傳遞中是一個對象。這可能與原始回答的教育目的完全正交,但它可以幫助我處理與之相關的另一個相關主題。謝謝。 – 2017-08-04 16:31:26

4

Python的教程討論how to use lists

存儲的類的列表是不大於存儲的任何其他對象不同。

def MyClass(object): 
    pass 

my_types = [str, int, float, MyClass] 
-1

我認爲你是做什麼的在這裏用含有類實例的結構。我不知道在python中命名結構的語法,但是在perl中,我可以創建一個結構obj.id [x],其中x是一個遞增的整數。然後,我可以通過數字參照結構來引用我所需的特定類實例。這是否與你想要做的事情一致?

2

在Python中,類的名稱指的是類的實例。試想一下:

class A: pass 
class B: pass 
class C: pass 

lst = [A, B, C] 

# instantiate second class 
b_instance = lst[1]() 
print b_instance 
0

如果my_list是要你的對象存儲在它和my_object是你的對象要進行存儲,使用這種結構的列表:

my_list.append(my_object) 
0

我有一些哈克的答案是可能會很糟糕......但我在這方面的經驗很少。

方式:

class myClass(): 
    myInstances = [] 
    def __init__(self, myStr01, myStr02): 
     self.myStr01 = myStr01 
     self.myStr02 = myStr02 
     self.__class__.myInstances.append(self) 

myObj01 = myClass("Foo", "Bar") 
myObj02 = myClass("FooBar", "Baz") 

for thisObj in myClass.myInstances: 
    print(thisObj.myStr01) 
    print(thisObj.myStr02) 

一個黑客的方法來完成這件事:

import sys 
class myClass(): 
    def __init__(self, myStr01, myStr02): 
     self.myStr01 = myStr01 
     self.myStr02 = myStr02 

myObj01 = myClass("Foo", "Bar") 
myObj02 = myClass("FooBar", "Baz") 

myInstances = [] 
myLocals = str(locals()).split("'") 
thisStep = 0 
for thisLocalsLine in myLocals: 
    thisStep += 1 
    if "myClass object at" in thisLocalsLine: 
     print(thisLocalsLine) 
     print(myLocals[(thisStep - 2)]) 
     #myInstances.append(myLocals[(thisStep - 2)]) 
     print(myInstances) 
     myInstances.append(getattr(sys.modules[__name__], myLocals[(thisStep - 2)])) 

for thisObj in myInstances: 
    print(thisObj.myStr01) 
    print(thisObj.myStr02) 

另一個更 '聰明' 技巧:

import sys 
class myClass(): 
    def __init__(self, myStr01, myStr02): 
     self.myStr01 = myStr01 
     self.myStr02 = myStr02 

myInstances = [] 
myClasses = { 
    "myObj01": ["Foo", "Bar"], 
    "myObj02": ["FooBar", "Baz"] 
    } 

for thisClass in myClasses.keys(): 
    exec("%s = myClass('%s', '%s')" % (thisClass, myClasses[thisClass][0], myClasses[thisClass][1])) 
    myInstances.append(getattr(sys.modules[__name__], thisClass)) 

for thisObj in myInstances: 
    print(thisObj.myStr01) 
    print(thisObj.myStr02)