由于我是OOP的Python和实例的新手,所以对我来说,所有这些都是很新的。我目前正在为学校写一本应该有3个班级的:学生,老师,学校。 (所有这些文件都在自己的.py文档中)。
“老师”课程包含姓名,学科和年龄的列表
“学生”类拥有姓名,课程和学生ID的列表
“学校”类是将两者结合在一起的类,它包含它们。
现在,如果我调用实例方法Student.print_list(),它将告诉我缺少一个参数。
自我是做什么的,为什么它是强制性的,如何避免不得不输入其他类的参数?
我的第二个但同样的问题是我想打印出一个教师信息,但必须发送一个参数。显然,自我仍然不起作用/它接受了我给它的第一个参数。
我已经尝试了很多方法,但到目前为止都无济于事。 我试过了:类方法(作弊),离开自我(错误),传递诸如list_students(False)(作弊)之类的东西。我如何合法地解决这个问题?
student.py
class Student:
def __init__(self, name, student_id, classes):
self.name = name
self.student_id = student_id
self.classes = classes
student_list = []
student_list.append(Student('Nemo the Fish', '12-b-018241', 'english, maths, IT')
#a list of all student names etc. is entered here
school.py
import Student
class School:
def print_list(self):
for Student.Student in Student.student_list:
print Student.Student.name
main.py
import school
print_list()
很显然,我想要一堆名字的列表,但是我得到了“缺少1个必需的位置参数:自我”。我觉得我做错了,是错误地调用了该方法,因为必须有一种方法
(自我)像预期的那样存在
在不提供垃圾参数的情况下调用该方法
不要使用任何@classmethod之类的东西
感谢您的帮助,我已经尝试解决了2天,但我只是想不通。
答案 0 :(得分:1)
如果我正确理解了您提供的代码,则以下内容将满足您的要求:
student.py:
class Student:
def __init__(self, name, student_id, classes):
self.name = name
self.student_id = student_id
self.classes = classes
school.py:
from student import Student
class School:
def __init__(self):
self.student_list = []
self.student_list.append(Student('Nemo the Fish', '12-b-018241', 'english, maths, IT'))
def print_list(self):
for student in self.student_list:
print(student.name)
main.py:
from school import School()
this_school = School()
this_school.print_list()
尽管这不是将学生列表硬编码到班级定义中的最佳方法。