Подтвердить что ты не робот

Создание списка объектов в Python

Как мне создать список объектов (экземпляр класса) в Python?

Или это результат плохого дизайна? Мне нужно, чтобы у меня были разные объекты, и мне нужно обработать их на более позднем этапе, поэтому я просто буду добавлять их в список и называть их позже.

4b9b3361

Ответ 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 - это инкрементное целое число. Затем я мог бы просто вернуться к конкретному экземпляру класса, который мне нужен, если ссылаться на структуру численно. Это что-то в направлении того, что вы пытаетесь сделать?