-
Notifications
You must be signed in to change notification settings - Fork 0
/
training.py
110 lines (94 loc) · 6.91 KB
/
training.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# -*- coding: utf-8 -*-
"""
Created on 02.11.2024.
@author: dmitr
"""
# Попытка разобраться с классами и подклассами, модулями и прочим
# Создание класса
class ParentClass: # [У класса нет атрибутов[]
"""Родительский класс""" # Обязательно добавлять формат
# Метод __init__ в Python используется для инициализации
# нового объекта после его создания. Этот метод позволяет
# задать начальные значения атрибутов объекта.
# При создании нового экземпляра класса, метод __init__
# автоматически вызывается и выполняет необходимую
# инициализацию объекта. Кроме того, метод __init__
# может принимать аргументы, которые передаются при создании
# объекта и позволяют передавать данные для инициализации.
def __init__(self, name, age, gender): # Аргументы
# После self в методе __init__ обычно указываются аргументы,
# которые будут использоваться для инициализации атрибутов объекта.
# Например, если у нас есть класс ParentClass с атрибутами name и age,
# то мы можем написать метод __init__ следующим образом:
self.name = name
self.age = age
self.gender = gender
# После метода __init__ в классе обычно определяются другие методы,
# которые описывают поведение объектов этого класса.
# Например, это может быть метод для выполнения определенной
# операции с объектом, метод для вывода информации об объекте,
# метод для изменения состояния объекта и т.д.
# Какие методы будут определяться после __init__
# зависит от конкретного класса и его назначения.
# Общие методы, которые могут следовать за __init__,
# могут включать методы для изменения атрибутов объекта,
# методы для взаимодействия с другими объектами или внешними
# ресурсами, методы для вычисления значений на основе атрибутов
# объекта и многие другие.
def say_hello(self, name, age, gender):
"""Метод приветствия"""
return f"Hi! I'm {name}. I'm {age} years old and I'm a {gender}"
def age_comparison(self, child): # child - аттрибут метода, хоть подкласс.
"""Сравниваем возраст родителя и ребёнка"""
# self обязательный, только если метод класса работает
# с атрибутами конкретного экземпляра класса
if child.age > self.age:
return f"{child.name} is older than {self.name} " + \
f"on {child.age - self.age} years" # Форматирование
elif child.age < self.age:
return f"{child.name} is younger than {self.name} " + \
f"on {self.age - child.age} years" # Форматирование
else:
return f"{child.name} is same age as {self.name}"
def __str__(self):
"""Более информативный вывод"""
return f"{self.name} is an object of class ParentClass"
class ChildClass(ParentClass):
"""Дочерний класс, где ParentClass - родитель, а ChildClass - ребёнок"""
def __init__(self, name, age, gender): # Аргументы
super().__init__(name, age, gender)
# super().__init__ используется в дочернем классе для вызова
# конструктора
# (метода __init__) родительского класса и выполнения необходимой
# инициализации атрибутов объекта, которые были определены
# в родительском классе. Это позволяет дочернему классу использовать
# функциональность родительского класса, при этом добавляя свои
# дополнительные атрибуты и поведение.
# # Когда дочерний класс инициализируется с помощью super().__init__,
# атрибуты, определенные в родительском классе, могут быть правильно
# инициализированы перед добавлением собственных атрибутов дочернего
# класса. Это обеспечивает правильное наследование и инициализацию
# объектов, соблюдая принципы ООП.
# Использование super().__init__ также повышает гибкость и
# расширяемость кода, так как позволяет легко изменять структуру
# классов, добавляя новые функциональности через классы-наследники.
self.name = name
self.age = age
self.gender = gender
def __str__(self):
"""Более информативный вывод"""
return f"{self.name} is an object of class ChildClass"
FATHER = ParentClass('Father', 50, 'male')
MOTHER = ParentClass('Mother', 45, 'Female')
print(FATHER)
print(MOTHER)
# В случае, когда объект класса выводится с помощью функции print,
# Python вызывает метод __str__ для объекта, чтобы получить строковое
# представление объекта.
print(FATHER.say_hello('Father', 50, 'male')) # В функции указаны аргументы
CHILD = ChildClass('Child', 13, 'female')
print(CHILD)
print(CHILD.say_hello('Child', 13, 'female'))
print(FATHER.age_comparison(CHILD))
print(MOTHER.age_comparison(CHILD))
print(MOTHER.age_comparison(FATHER))