Как избежать «отсутствующих аргументов» в экземплярах и классах - PullRequest
0 голосов
/ 07 января 2019

Поскольку я новичок в ООП, то и Python, и экземпляры, и все это довольно ново для меня. В настоящее время я пишу для школы, которая должна иметь 3 класса: ученик, учитель, школа. (все они в своем собственном .py документе).

В классе «Учитель» содержится список Имени, предметов и возраста

Класс '' Student '' содержит список имен, классов и идентификаторов студентов

Класс "Школа" - это класс, который объединяет их обоих, он содержит их.

Теперь, если я вызываю метод экземпляра 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 обязательный позиционный аргумент: self». Я чувствую, что то, что я сделал неправильно, неправильно вызвало метод, потому что должен быть способ

иметь (себя) там, как должно быть

вызов метода без указания параметров корзины

не использовать @classmethod или что-то подобное

Спасибо за вашу помощь, я пытался решить эту проблему в течение 2 дней, и я просто не понимаю, как это сделать.

1 Ответ

0 голосов
/ 07 января 2019

Если вы правильно поняли предоставленный вами код, то все, что вы хотите, будет сделано следующим образом:

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

Хотя это не лучший подход к жесткому кодированию списка учащихся в определении класса.

...