March 7

Пример объектно-ориентированной программы на Python

# Создайте классы:
# «Ученик» с атрибутами: имя, возраст и класс (например, «5А»).
# «Учитель» с атрибутами: имя и предмет, который он преподает.
# «Школа» с атрибутами: название школы и список учеников и учителей.
#
# Классы «Ученик» и «Учитель» должны иметь методы для вывода информации о них.
# Класс «Школа» должен иметь методы для добавления учеников и учителей в школу, а также для проведения занятий.

class Student:
	def __init__(self, name: str, surname: str, age: int, group: str) -> None:
		self.name = name
		self.surname = surname
		self.age = age
		self.group = group

	def set_name(self, name: str) -> 'Student':
		self.name = name
		return self

	def set_surname(self, surname: str) -> 'Student':
		self.surname = surname
		return self

	def set_age(self, age: int) -> 'Student':
		self.age = age
		return self

	def set_group(self, group: str) -> 'Student':
		self.group = group
		return self

	def get_info(self) -> str:
		return '\n'.join([
			'Ученик',
			f'  Имя: {self.name}',
			f'  Фамилия: {self.surname}',
			f'  Возраст: {self.age}',
			f'  Класс: {self.group}'
		])

	def study(self) -> 'Student':
		print(f'Ученик {self.name} {self.surname} обучается в классе {self.group}')
		return self


class Teacher:
	def __init__(self, name: str, surname: str, subject: str) -> None:
		self.name = name
		self.surname = surname
		self.subject = subject

	def set_name(self, name: str) -> 'Teacher':
		self.name = name
		return self

	def set_surname(self, surname: str) -> 'Teacher':
		self.surname = surname
		return self

	def set_subject(self, subject: str) -> 'Teacher':
		self.subject = subject
		return self

	def get_info(self) -> str:
		return '\n'.join([
			'Учитель',
			f'  Имя: {self.name}',
			f'  Фамилия: {self.surname}',
			f'  Предмет: {self.subject}'
		])

	def teach(self) -> 'Teacher':
		print(f'Учитель {self.name} {self.surname} преподает {self.subject}')
		return self


class School:
	def __init__(self, name: str) -> None:
		self.name = name
		self.students: list[Student] = []
		self.teachers: list[Teacher] = []

	def add_student(self, student: Student) -> 'School':
		self.students.append(student)
		return self

	def add_teacher(self, teacher: Teacher) -> 'School':
		self.teachers.append(teacher)
		return self

	def get_info(self) -> str:
		result = ''

		result += '\n\n'.join([teacher.get_info() for teacher in self.teachers])
		result += '\n\n'
		result += '\n\n'.join([student.get_info() for student in self.students])

		return result

	def conduct_lessons(self) -> 'School':
		for teacher in self.teachers:
			teacher.teach()

		print()

		for student in self.students:
			student.study()

		return self


def main():
	students: list[Student] = [
		Student('Матвей', 'Богданов', 16, '9В'),
		Student('Кира', 'Филиппова', 18, '11Б'),
		Student('Софья', 'Шувалова', 17, '10А')
	]

	teachers: list[Teacher] = [
		Teacher('Лев', 'Трофимов', 'Русский язык'),
		Teacher('Анастасия', 'Киреева', 'Английский язык'),
		Teacher('Николай', 'Борисов', 'Информатика')
	]

	school = School('МОУ "СОШ №115"')

	for student in students:
		school.add_student(student)

	for teacher in teachers:
		school.add_teacher(teacher)

	school.conduct_lessons()


if __name__ == '__main__':
	main()