我是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'
如果你想了解class
es,你可能想考虑阅读这样的东西,或者这已经在评论中建议。
不过,你的问题是
a.),您使用class
es而不创建它的实例。用class eleve:
定义class
只是第一部分,接下来你必须创建一个实例(例如eleve()
),然后它可以作为Python中的其他对象使用。只写eleve
只是引用类,这有点像实例的模板。但是,您希望实例携带您分配给它们的值(例如,当将某些输入分配给.nom
时)。
b。)通过在eleve
周围添加[ ... ]
,您将创建一个list
,其中list
中的一个元素包含三个这样的list
。因此,在代码中调用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))