如何避免实例和类中的“缺少参数”

时间:2019-01-07 10:09:02

标签: python python-3.x methods instance self

由于我是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天,但我只是想不通。

1 个答案:

答案 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() 

尽管这不是将学生列表硬编码到班级定义中的最佳方法。