在Python中创建对象列表

时间:2010-07-05 21:10:21

标签: python

如何在Python中创建对象列表(类实例)?

或者这是设计糟糕的结果?我需要这个原因我有不同的对象,我需要在稍后阶段处理它们,所以我会继续将它们添加到列表中并稍后调用它们。

7 个答案:

答案 0 :(得分:40)

存储对象实例列表非常简单

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

答案 1 :(得分:4)

Python教程讨论how to use lists

存储类列表与存储任何其他对象没什么不同。

def MyClass(object):
    pass

my_types = [str, int, float, MyClass]

答案 2 :(得分: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

答案 3 :(得分:1)

我有一些可能很糟糕的hacky答案......但我现在的经验很少。

一种方式:

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)

答案 4 :(得分:0)

如果my_list是您要将对象存储在其中的列表,而my_object是您希望存储的对象,请使用以下结构:

my_list.append(my_object)

答案 5 :(得分:0)

您可以使用列表理解功能在一行中创建对象列表。

class MyClass(object): pass

objs = [MyClass() for i in range(10)]

print(objs)

答案 6 :(得分:-1)

我认为你在这里做的是使用包含类实例的结构。我不知道python中命名结构的语法,但是在perl中我可以创建一个结构obj.id [x],其中x是一个递增的整数。然后,我可以通过数字引用结构来返回我需要的特定类实例。这有什么方向你正在尝试做什么?