Skip to content

Commit 5a6c50e

Browse files
committed
2 parents 80bf2ac + 1fc0806 commit 5a6c50e

14 files changed

Lines changed: 11456 additions & 0 deletions

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- Улучшен [интро](https://github.com/SENATOROVAI/intro/blob/main/README.md),[обновлена структура](https://github.com/SENATOROVAI/intro/issues/10), спасибо [savemysoul382](https://github.com/savemysoul382)
66
- Улучшен [ишьюс git](https://github.com/SENATOROVAI/intro-cs/issues/1), [обновлена структура](https://github.com/SENATOROVAI/intro-cs/issues/15), спасибо [savemysoul382](https://github.com/savemysoul382)
77
- [Тестирование функционала](https://github.com/SENATOROVAI/intro/issues/11), спасибо [smrnvdn](https://github.com/smrnvdn)
8+
- Улучшено описание [3 группы](https://github.com/SENATOROVAI/Math-Data-Analysis/issues/1), добавлены этапы пайплана, спасибо [savemysoul382](https://github.com/savemysoul382)
89

910
# Другие улучшения
1011
- Опечатка в курсе по [множественной регрессии](https://stepik.org/lesson/1792642/step/10?auth=login&unit=1818331), некорректная формулировка, спасибо [rizespbya](https://github.com/rizespbya)
@@ -14,3 +15,5 @@
1415
- Обновление интро,внедрение раздела о нас, договора, средства коммуникации, спасибо [ViktorVinogradov89](https://github.com/ViktorVinogradov89)
1516
- Улучшение курса [множественная регрессия](https://stepik.org/lesson/1792608/step/10?unit=1818297), внедрение Data Leakage, спасибо [smrnvdn](https://github.com/smrnvdn)
1617
- Улучшение курса [множественной регрессии](https://stepik.org/lesson/1792810/step/2?auth=login&unit=1818500), внедрение логической связи вывода матричной формы SSE, спасибо [rizespbya](https://github.com/rizespbya)
18+
- Улучшение курса, [множественной регрессии](https://stepik.org/lesson/1792848/step/2?unit=1818537), внедрён аудиопересказ, спасибо [Ekubbo](https://github.com/Ekubbo)
19+

oop.ipynb

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"id": "a5fdb13d",
6+
"metadata": {},
7+
"source": [
8+
"Этап 1: Объявление класса и интроспекция (Видео №1)\n",
9+
"Класс создается ключевым словом class, а его название пишется в стиле CamelCase. Даже пустой класс является объектом и имеет встроенные атрибуты.\n",
10+
"# 1. Создание простейшего класса\n",
11+
"class Person:\n",
12+
" pass\n",
13+
"\n",
14+
"# 2. Интроспекция класса\n",
15+
"print(Person.__name__) # Имя класса [2]\n",
16+
"print(dir(Person)) # Список всех атрибутов и методов [2]\n",
17+
"\n",
18+
"# 3. Создание экземпляра\n",
19+
"p = Person()\n",
20+
"print(type(p)) # Тип объекта [2]\n",
21+
"print(id(p)) # Адрес объекта в памяти [3]\n",
22+
"\n",
23+
"# 4. Динамическое создание объекта того же типа\n",
24+
"new_p = type(p)()\n",
25+
"print(id(new_p)) # Разные ID подтверждают, что это разные объекты [3]\n",
26+
"Этап 2: Атрибуты класса и функции управления (Видео №2)\n",
27+
"Атрибуты класса задаются через простое присваивание и хранятся в специальном словаре __dict__.\n",
28+
"class Person:\n",
29+
" name = \"Ivan\" # Атрибут класса [4]\n",
30+
"\n",
31+
"# 1. Работа с пространством имен (mappingproxy)\n",
32+
"print(Person.__dict__) [5]\n",
33+
"\n",
34+
"# 2. Динамическое добавление атрибута\n",
35+
"Person.age = 25 [6]\n",
36+
"\n",
37+
"# 3. Встроенные функции для работы с атрибутами\n",
38+
"setattr(Person, \"dob\", \"2000-01-01\") # Установка [7]\n",
39+
"print(getattr(Person, \"name\")) # Чтение [7]\n",
40+
"delattr(Person, \"dob\") # Удаление [7]\n",
41+
"Этап 3: Экземпляры и локальные пространства имен (Видео №3)\n",
42+
"При вызове класса создается экземпляр с собственным пустым словарем __dict__.\n",
43+
"p1 = Person()\n",
44+
"p2 = Person()\n",
45+
"\n",
46+
"# 1. Поиск атрибута (сначала в экземпляре, потом в классе)\n",
47+
"print(p1.name) # Вернет \"Ivan\" из класса, так как в p1.__dict__ пусто [9]\n",
48+
"\n",
49+
"# 2. Создание уникального состояния экземпляра\n",
50+
"p1.name = \"Oleg\"\n",
51+
"p2.name = \"Dima\"\n",
52+
"p2.age = 20\n",
53+
"\n",
54+
"print(p1.__dict__) # {'name': 'Oleg'} [10]\n",
55+
"print(p2.__dict__) # {'name': 'Dima', 'age': 20} [10, 11]\n",
56+
"Этап 4: Методы экземпляра и параметр self (Видео №4)\n",
57+
"Функции внутри класса при вызове через экземпляр становятся «связанными методами» и автоматически получают ссылку на объект в первом аргументе (self).\n",
58+
"class Person:\n",
59+
" def hello(self): # self — обязательный параметр для метода экземпляра [13, 15]\n",
60+
" print(f\"Hello! Я объект {id(self)}\") [14]\n",
61+
"\n",
62+
"p = Person()\n",
63+
"\n",
64+
"# 1. Вызов через точку (синтаксический сахар)\n",
65+
"p.hello() # Ссылка на 'p' передается в 'self' автоматически [14, 16]\n",
66+
"\n",
67+
"# 2. Явный вызов через класс (что происходит под капотом)\n",
68+
"Person.hello(p) [16, 17]\n",
69+
"Этап 5: Инициализация через __init__ (Видео №5)\n",
70+
"Метод __init__ вызывается автоматически сразу после создания объекта для задания его начальных свойств.\n",
71+
"class Person:\n",
72+
" def __init__(self, name, age): # Метод-инициализатор [18, 20]\n",
73+
" self.name = name # Запись данных в локальный словарь объекта [21, 22]\n",
74+
" self.age = age\n",
75+
"\n",
76+
" def display(self):\n",
77+
" print(f\"Имя: {self.name}, Возраст: {self.age}\") [23]\n",
78+
"\n",
79+
"# Создание проинициализированных объектов\n",
80+
"p1 = Person(\"Ivan\", 25) [18]\n",
81+
"p2 = Person(\"Oleg\", 30) [18]\n",
82+
"\n",
83+
"p1.display()\n",
84+
"Этап 6: Статические методы (Видео №6)\n",
85+
"Статические методы не привязаны к конкретному экземпляру и не принимают self. Они определяются декоратором @staticmethod.\n",
86+
"class Person:\n",
87+
" def __init__(self, name):\n",
88+
" self.name = name\n",
89+
"\n",
90+
" @staticmethod\n",
91+
" def generic_info(): # Не принимает self [24, 28]\n",
92+
" print(\"Это вспомогательный метод класса Person.\") [25, 28]\n",
93+
"\n",
94+
"# 1. Вызов статического метода (можно через класс или через объект)\n",
95+
"Person.generic_info() [28]\n",
96+
"p = Person(\"Dima\")\n",
97+
"p.generic_info() [28]\n",
98+
"\n",
99+
"# 2. Проверка: статический метод — это один и тот же объект для всех экземпляров\n",
100+
"print(id(Person.generic_info) == id(p.generic_info)) # True [29]"
101+
]
102+
}
103+
],
104+
"metadata": {
105+
"kernelspec": {
106+
"display_name": "base",
107+
"language": "python",
108+
"name": "python3"
109+
},
110+
"language_info": {
111+
"codemirror_mode": {
112+
"name": "ipython",
113+
"version": 3
114+
},
115+
"file_extension": ".py",
116+
"mimetype": "text/x-python",
117+
"name": "python",
118+
"nbconvert_exporter": "python",
119+
"pygments_lexer": "ipython3",
120+
"version": "3.13.5"
121+
}
122+
},
123+
"nbformat": 4,
124+
"nbformat_minor": 5
125+
}

0 commit comments

Comments
 (0)