如何在Python中创建对象列表(类实例)?在Python中创建对象列表
或者这是不好的设计的结果?我需要这个原因,我有不同的对象,我需要在稍后阶段处理它们,所以我会继续将它们添加到列表中并稍后调用它们。
如何在Python中创建对象列表(类实例)?在Python中创建对象列表
或者这是不好的设计的结果?我需要这个原因,我有不同的对象,我需要在稍后阶段处理它们,所以我会继续将它们添加到列表中并稍后调用它们。
存储对象实例的列表很简单
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
在那里你在第一行通过“对象”,是一个实际的对象还是一个表示对象实例的编号的数字? 如果我写 my_objects(1), 我会打电话来的第一个对象,但我不认为1传递中是一个对象。这可能与原始回答的教育目的完全正交,但它可以帮助我处理与之相关的另一个相关主题。谢谢。 – 2017-08-04 16:31:26
Python的教程讨论how to use lists。
存储的类的列表是不大于存储的任何其他对象不同。
def MyClass(object):
pass
my_types = [str, int, float, MyClass]
我认为你是做什么的在这里用含有类实例的结构。我不知道在python中命名结构的语法,但是在perl中,我可以创建一个结构obj.id [x],其中x是一个递增的整数。然后,我可以通过数字参照结构来引用我所需的特定类实例。这是否与你想要做的事情一致?
在Python中,类的名称指的是类的实例。试想一下:
class A: pass
class B: pass
class C: pass
lst = [A, B, C]
# instantiate second class
b_instance = lst[1]()
print b_instance
如果my_list是要你的对象存储在它和my_object是你的对象要进行存储,使用这种结构的列表:
my_list.append(my_object)
我有一些哈克的答案是可能会很糟糕......但我在这方面的经验很少。
方式:
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)
你的意思是类型对象的列表('[type(x),...]')或类的实例('[1,2,3]')? – Skurmedel 2010-07-05 21:12:18
@Skurmedel:类实例。我的问题:) – user225312 2010-07-06 05:07:46
@Alfred提到它具体是:嘿嘿,我只是觉得类实例有点暧昧,但我明白你的意思了通过选择的答案:P – Skurmedel 2010-07-06 11:29:51