Создание списка объектов в Python
Как мне создать список объектов (экземпляр класса) в Python?
Или это результат плохого дизайна? Мне нужно, чтобы у меня были разные объекты, и мне нужно обработать их на более позднем этапе, поэтому я просто буду добавлять их в список и называть их позже.
Ответы
Ответ 1
Хранение списка экземпляров объектов очень просто
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
Ответ 2
В учебнике Python обсуждается как использовать списки.
Сохранение списка классов не отличается от хранения любых других объектов.
def MyClass(object):
pass
my_types = [str, int, float, MyClass]
Ответ 3
В Python имя класса относится к экземпляру класса. Рассмотрим:
class A: pass
class B: pass
class C: pass
lst = [A, B, C]
# instantiate second class
b_instance = lst[1]()
print b_instance
Ответ 4
У меня есть некоторые хакерские ответы, которые, вероятно, будут ужасны... но на данный момент у меня очень мало опыта.
способ:
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)
Ответ 5
если my_list - это список, который вы хотите сохранить в нем, а my_object - ваш объект, который нужно сохранить, используйте эту структуру:
my_list.append(my_object)
Ответ 6
Вы можете создать список объектов в одну строку, используя понимание списка.
class MyClass(object): pass
objs = [MyClass() for i in range(10)]
print(objs)
Ответ 7
Я думаю, что вы здесь делаете, используя структуру, содержащую ваши экземпляры класса. Я не знаю синтаксиса для именования структур в python, но в perl я мог бы создать структуру obj.id [x], где x - это инкрементное целое число. Затем я мог бы просто вернуться к конкретному экземпляру класса, который мне нужен, если ссылаться на структуру численно. Это что-то в направлении того, что вы пытаетесь сделать?