Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему устанавливается значение None в поле Students?

Anton Moskin Ученик (103), на голосовании 2 года назад
Здравствуйте, подскажите пожалуйста, почему при наследовании от класса, выдается неверный результат?

Вот код:

class Build:
year = None
size = None

def __init__(self, year, size):
self.year = year
self.size = size
self.get_print()

def get_print(self):
print(f"Year: {self.year}, Size: {self.size}")


class School(Build):
students = None
def __init__(self, students, year, size):
super(School, self).__init__(year, size)
self.students = students

def get_print(self):
print(f"Year: {self.year}, Size: {self.size}, Students: {self.students}")


one_build = School(52, 1922, 132)


# Вывод: Year: 1922, Size: 132, Students: None
# Ожидаемый вывод: Year: 1922, Size: 132, Students: 52

Почему устанавливается значение None в поле Students?
Голосование за лучший ответ
꧁Tester꧂ ︎ Просветленный (21598) 2 года назад
Так ты же его сам прописал зачем-то.
Anton MoskinУченик (103) 2 года назад
У меня есть поле Students оно принимает значение по умолчанию, если я его не задам или уж тем более на объявлю поле с таким именем, то программа не запустится и выдаст ошибку, поэтому я задаю значение по умолчанию, которое потом должно меняться при выводе.
Мне нужно чтобы, когда я вызывал класс, в него передавались нужные мне значения и потом они же выводились, но в моем же случае получается, что поля которые были записаны в родительском классе они корректно изменяются, но поле которое записано в классе-наследнике, так и выводится с значением по умолчанию.
꧁Tester꧂ ︎ Просветленный (21598) Anton Moskin, ты написал,
 students = None 
и спрашиваешь, почему students = None.
An1Byte Мудрец (10871) 2 года назад
Дааа нелогичная отработка)))
По всей видимости здесь в дочернем классе вы переопределили метод и при вызове в конструкторе он запрашивает студентов которых еще нет.. Это не должно переопределять базовый метод(если сравнивать концепцию с другими яп) , но он его всеже переопределяет... С другой стороны вы можете переместить функцию внутрь конструктора и вызвать ее локально...
Похожие вопросы