#python #class
Вопрос:
Я новичок в занятиях по python. Я пытался создать класс t
, внутри которого есть список, и каждый элемент этого списка содержит другой класс. Например, класс с именем student
, содержащим две переменные ( student_name
, mark
). Вот мой код:
def RempClasse(y):
for i in range(3):
y.t[i].nom = input("nom du elevel")
y.t[i].moyen = float(input("moyenne du elevel"))
for i in range(3):
print(y.t[i].nom)
print(y.t[i].moyen)
class eleve :
nom = ""
moyen = float()
class classe :
t=[[eleve] for i in range(3)]
print(RempClasse(classe))
Проблема в том, что он продолжает выдавать мне эту ошибку, когда я вводлю ввод для nom du elevel
:
Traceback (most recent call last):
File "/path/to/code.py", line 13, in <module>
print(RempClasse(classe))
File "/path/to/code.py", line 3, in RempClasse
y.t[i].nom = input("nom du elevel")
AttributeError: 'list' object has no attribute 'nom'
Комментарии:
1. Как именно это «не работает»? Пожалуйста, не забудьте сначала прочитать учебник о занятиях
2. Ошибка атрибута: объект «список» не имеет атрибута «nom»
3. Вы пробовали
t=[eleve() for i in range(3)]
?
Ответ №1:
Если вы хотите узнать об class
es, вы можете подумать о том, чтобы прочитать что-то подобное или это уже предлагалось в комментариях.
Тем не менее, ваша проблема заключалась в
a.) что вы используете class
es, не создавая его экземпляров. Определение class
с class eleve:
помощью, как вы это сделали, — это только первая часть, затем вам нужно создать экземпляр (например, eleve()
), который затем можно использовать в качестве других объектов в Python. Просто написание eleve
просто относится к классу, который является чем-то вроде шаблона для экземпляров. Однако вам нужны экземпляры, поскольку они несут значения, которые вы им присваиваете (например, при назначении некоторых входных данных .nom
).
б.) Добавив [ ... ]
вокруг eleve
, вы создадите a list
с одним элементом в a list
, который содержит три таких list
s. Таким образом, при вызове y.t[i]
вашего кода вы получаете list
. В этом list
находится объект, у которого есть атрибут, который вы хотите вызвать. Просто удаление этих скобок создает list
множество экземпляров или объектов, с которыми вы можете работать.
Ниже приведен рабочий пример, однако это не то, для чего предназначено объектно-ориентированное программирование. Я настоятельно рекомендую вам сначала прочитать об объектно-ориентированном программировании, прежде чем продолжить.
def RempClasse(y):
for i in range(3):
y.t[i].nom = input("nom du elevel")
y.t[i].moyen = float(input("moyenne du elevel"))
for i in range(3):
print(y.t[i].nom)
print(y.t[i].moyen)
class eleve :
nom = ""
moyen = float()
class classe :
t=[eleve() for i in range(3)]
print(RempClasse(classe))
Комментарии:
1. о, это сработало, не могли бы вы объяснить разницу между t=[eleve() для i в диапазоне(3)] и t=[[eleve] для i в диапазоне(3)]
2. @BabaGanoush Я обновил объяснение, однако, почитайте немного больше о классах, это вам очень поможет. Удачи вам в учебе.