如何在Python中创建对象列表(类实例)?
或者这是设计糟糕的结果?我需要这个原因我有不同的对象,我需要在稍后阶段处理它们,所以我会继续将它们添加到列表中并稍后调用它们。
答案 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是一个递增的整数。然后,我可以通过数字引用结构来返回我需要的特定类实例。这有什么方向你正在尝试做什么?