проблема с попыткой ввода списка классов в python

#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 Я обновил объяснение, однако, почитайте немного больше о классах, это вам очень поможет. Удачи вам в учебе.