出于某些原因(例如),我有一个类以以下方式继承了另一个类
class student():
def __init__(self,Name_,Grade_):
self.Name=Name_
self.Grade_=Grade
#Some other code
class Classroom(student):
def __init__(self,Class_Name_,Class_Supervisoir_,list_of_students_Names_,
List_of_Students_Grades_):
self.Class_Name=Class_Name_
self.Class_Supervisoir=Class_Supervisoir_
self.list_of_students_Names=list_of_students_Names_
self.List_of_Students_Grades=List_of_Students_Grades_
for _,__ in enumerate(self.List_of_Students_Grades):
exec("self.Student_"+str(__)+"=student("+str(__)+","+str(
self.List_of_Students_Grades[_])+")"我想从类“学生”中创建一些实例,但作为类的一部分,“教室”,即可以在self.student中引用。
然而,我不知道输入的学生的数量(可以是很多),我想为他们中的每个人创建一个对象,如下所示:
self.Student_Mark=student(mark,20)
self.Student_Peter=student(peter,15)
...以此类推。
然后问题是,我想做一个像上面那样的赋值语句,但我不能不使用exec()函数来做这件事,我已经读到了在生产级别使用exec()函数的安全风险,那么我如何才能用具有相同功能的东西来替换这里的exec()呢?
发布于 2021-11-17 15:09:50
有点框架性的问题:为什么教室是学生的子班?教室是一个房间,但更重要的是,教室(由于显而易见的原因,不能真正称其为class )代表一组学生、一个教师/主管和一个名字。因此,创建一组学生,而不是每个学生的变量:
class Classroom:
def __init__(self, name, supervisor, students, grades):
self.name = name
self.supervisor = supervisor
self.students = []
# do it here
for name, grade in zip(students, grades):
self.students.append(student(name, grade))此外,使用_和__作为您使用的值是一个相当大的危险信号。通常,_被用作向开发人员发出不使用值的信号:
# we don't use the values produced by range, so
# the _ is a throwaway
five_students = [student('tom', 100) for _ in range(5)]
# now we use the value, so use a name for it
five_students = [student('tom', grade) for grade in range(95, 100)]发布于 2021-11-17 15:13:00
我不知道你为什么要这样命名你的属性。但是你可以使用setattr。另外,我不认为这是一次性变量的好用例,相反,你可以这样写:
for ix, name in enumerate(self.List_of_Students_Grades):
setattr(
self,
f"Student_{name}",
student(name, self.List_of_Students_Grades[index])
)https://stackoverflow.com/questions/70006780
复制相似问题