Skip to content

Commit c33ed64

Browse files
committed
Add mixin example
1 parent c142dea commit c33ed64

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

15/15_mixin.ipynb

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Mixin"
8+
]
9+
},
10+
{
11+
"cell_type": "markdown",
12+
"metadata": {},
13+
"source": [
14+
"Описываем класс Mixin для чтения параметров из конфигурационного файла"
15+
]
16+
},
17+
{
18+
"cell_type": "code",
19+
"execution_count": null,
20+
"metadata": {},
21+
"outputs": [],
22+
"source": [
23+
"import configparser\n",
24+
"from pathlib import Path\n",
25+
" \n",
26+
"class SettingsFileMixin:\n",
27+
" # Путь к конфигурационному файле\n",
28+
" settings_path = Path('my_program.conf')\n",
29+
" # Парсер параметров\n",
30+
" config = configparser.ConfigParser()\n",
31+
"\n",
32+
" def read_setting(self, key):\n",
33+
" # Читаем файл с параметрами\n",
34+
" self.config.read(self.settings_path)\n",
35+
" try:\n",
36+
" # Возвращаем нужный параметр\n",
37+
" # Атрибут settings_section не определен в Mixin \n",
38+
" return self.config[self.settings_section][key]\n",
39+
" except KeyError:\n",
40+
" raise KeyError(\"Неправильная секция в файле конфигурации\")"
41+
]
42+
},
43+
{
44+
"cell_type": "markdown",
45+
"metadata": {},
46+
"source": [
47+
"Создаем класс, наследуемый от Mixin"
48+
]
49+
},
50+
{
51+
"cell_type": "code",
52+
"execution_count": null,
53+
"metadata": {},
54+
"outputs": [],
55+
"source": [
56+
"class DbController(SettingsFileMixin):\n",
57+
" def __init__(self):\n",
58+
" # Определяем атрибут, которого не хватает в Mixin\n",
59+
" self.settings_section = 'DATABASE'\n",
60+
"\n",
61+
" def connect(self):\n",
62+
" # Вызываем методы класса Mixin\n",
63+
" hostname = self.read_setting('HostName')\n",
64+
" username = self.read_setting('UserName')\n",
65+
" password = self.read_setting('Password')\n",
66+
" print(f'Параметры соединения с базой данных: {hostname}, {username}, {password}')"
67+
]
68+
},
69+
{
70+
"cell_type": "code",
71+
"execution_count": null,
72+
"metadata": {},
73+
"outputs": [],
74+
"source": [
75+
"d = DbController()"
76+
]
77+
},
78+
{
79+
"cell_type": "code",
80+
"execution_count": null,
81+
"metadata": {},
82+
"outputs": [],
83+
"source": [
84+
"d.connect()"
85+
]
86+
}
87+
],
88+
"metadata": {
89+
"kernelspec": {
90+
"display_name": ".venv",
91+
"language": "python",
92+
"name": "python3"
93+
},
94+
"language_info": {
95+
"codemirror_mode": {
96+
"name": "ipython",
97+
"version": 3
98+
},
99+
"file_extension": ".py",
100+
"mimetype": "text/x-python",
101+
"name": "python",
102+
"nbconvert_exporter": "python",
103+
"pygments_lexer": "ipython3",
104+
"version": "3.11.1"
105+
},
106+
"orig_nbformat": 4
107+
},
108+
"nbformat": 4,
109+
"nbformat_minor": 2
110+
}

0 commit comments

Comments
 (0)