Я хотел составить список экземпляров классов. Я использую Python 3.12.4.
Я пытался:
class MyClass:
def __init__ (self,MyClassData):
self.MyClassData = MyClassData
MyClassList = [""]
MyClassList.append(MyClass("hello"))
def ReadClassData () :
for i in MyClassList:
return MyClassList[i].MyClassData
print(ReadClassData())
и он возвращает:
Traceback (most recent call last):
File "C:/Users/malac/OneDrive/Documents/Python/Tests/Instance In List.py", line 9, in <module>
print(ReadClassData())
File "C:/Users/malac/OneDrive/Documents/Python/Tests/Instance In List.py", line 8, in ReadClassData
return MyClassList[i].MyClassData
TypeError: list indices must be integers or slices, not str
Меня смущает последняя часть. Я думал, что [i] — целое число?
Попробуйте напечатать i внутри цикла. Первый элемент MyClassList — это "".
И независимо от того, что первый элемент неправильный, i уже является объектом в списке, а не индексом.
Пожалуйста, не добавляйте ответы в сам вопрос. Либо примите ответ, который помог вам решить проблему, либо опубликуйте ответ самостоятельно.






Вот пошаговое описание того, что происходит:
class MyClass:
def __init__ (self,MyClassData):
self.MyClassData = MyClassData
Вы определили класс MyClass. Все идет нормально
MyClassList = [""]
MyClassList.append(MyClass("hello"))
MyClassList — это список, инициируемый одним элементом (пустая строка ""), к которому немедленно добавляется объект MyClass("hello"). MyClassList сейчас ["", MyClass("hello")]
def ReadClassData () :
for i in MyClassList:
return MyClassList[i].MyClassData
print(ReadClassData())
Цикл for перебирает MyClassList, получает свой первый элемент, т. е. "", и присваивает его i, так что i теперь "". Вот почему отображается ошибка, потому что вы пытаетесь получить доступ к элементу списка MyClassList с индексом str.
С вашим кодом есть две проблемы:
Вы инициализируете свой список пустой строкой, т.е. (MyClassList = [""])
Вместо этого напишите (MyClassList = [])
Вы напрямую перебираете содержимое списка, т.е.
(for i in MyClassList)
поэтому при возврате объекта с использованием индексов (MyClassList[i]) здесь i приводит к первому элементу списка, а не к целому числу.
Исправьте это, используя: range(len(MyClassList))
Ваш код после исправления:
class MyClass:
def __init__ (self,MyClassData):
self.MyClassData = MyClassData
MyClassList = []
MyClassList.append(MyClass("hello"))
def ReadClassData () :
for i in range(len(MyClassList)):
return MyClassList[i].MyClassData
print(ReadClassData())
Нет,
iне является целым числом. Это строка, как сказано в сообщении. Если бы вы не поместили строку в качестве первого элемента в свой «список экземпляров классов» (непонятно, почему вы это сделали), вместо этого это был бы экземплярMyClass. Выполните базовую отладку, например. используйте pythontutor.com