Python: создайте 50 объектов с помощью цикла for

Я новичок в python. Недавно я работаю над проектом, в котором я создал класс: -

class foo():
    def __init__(self, name):
    self.name = name

Я хочу создать 50 объектов этого класса, которые должны называться obj1, obj2, obj3, ..., obj50 Я пытаюсь создать такие классы, как

for i in range(1,51):
    obj + i = foo(i)

Таким образом, 50 объектов, таких как obj1, obj2, obj3, ..., obj50, создаются с именами 1, 2, 3, ..., 50. Но у меня почему-то это не работает. Может ли кто-нибудь сказать, что я здесь делаю не так. Я знаю, что могу использовать список для хранения объектов, но по какой-то причине я хотел бы сделать это таким образом. Любая помощь очень ценится.

obj + i в левом не будет работать так, как вы думаете.
Nishant 26.05.2018 15:39

почему вы не используете список для хранения объектов вместо создания их имен?

Michail Michailidis 26.05.2018 15:40

Не могли бы вы уточнить

The Mathemagician 26.05.2018 15:40

посмотрите здесь: stackoverflow.com/a/3182241/986160 (возможный дубликат)

Michail Michailidis 26.05.2018 15:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
4
301
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Сделать это можно так:

class foo():
    def __init__(self,name):
        self.name = name

    def __str__(self):
        return name

    def __repr__(self):  # will print the "name" as repres of this obj
        return self.name

objects= [foo(str(i)) for i in range(1,51)] # create 50 foo-objects named 1 to 50

print(objects) # list that contains your 50 objects

Выход:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 
 46, 47, 48, 49, 50]

Если вы удалите def __repr__(), вы получите что-то вроде:

[<__main__.foo object at 0x7fd4e9b78400>, 
 <__main__.foo object at 0x7fd4e9b78470>, 
 ... etc ..., 
 <__main__.foo object at 0x7fd4e9afd940>, 
<__main__.foo object at 0x7fd4e9afd9b0>]

Вы можете программно установить атрибут для текущего модуля, что и пытаетесь сделать. Намного лучше создать список объектов.

import sys

thismodule = sys.modules[__name__]   

class foo():
    def __init__(self, name):
        self.name = name

for i in range(1,51):
    setattr(thismodule, 'obj' + str(i), foo(i))

Я думаю, вам может потребоваться изучить концепцию массива, если вы еще не знали.

obj = [] # create an empty array
for i in range(1,51):
    obj.append(foo(i))

и вместо того, чтобы пытаться использовать obj1, obj2, ..., вы можете получить к нему доступ с помощью obj[1], obj[2], .... По сути, это массив.

Другие вопросы по теме