Skip to content

Commit 02a1364

Browse files
committed
📝 код-ревью 07: разобрал fixme-комменты из задачи — типы методов, иммутабельные дефолты
1 parent 4630f75 commit 02a1364

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

‎code-review-practice/solutions/07_config_loader.md‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,17 @@
2828

2929
6. Нет обработки `FileNotFoundError` / `json.JSONDecodeError` с внятным сообщением.
3030

31-
7. `DEFAULTS` — мутабельный модульный словарь, любой может его случайно изменить.
31+
7. `DEFAULTS` — мутабельный модульный словарь, любой может его случайно изменить (см. п.3 —
32+
именно это и происходит). Дефолты стоит сделать неизменяемыми: неглубокие — через
33+
`MappingProxyType`, а вложенные списки — кортежами / фабриками, чтобы их нельзя было
34+
мутировать на месте.
3235

33-
8. Нет типизации / схемы конфига (pydantic-settings решил бы половину проблем).
36+
8. Нет типизации / схемы конфига (pydantic-settings решил бы половину проблем: типы,
37+
валидацию, дефолты, чтение из env — вместо самописного класса).
38+
39+
9. **Нет аннотаций типов у методов** (`__init__`, `get`). `path: str`, `key: str` и
40+
возвращаемый тип не описаны — контракт неясен, mypy/IDE не помогут. Даже без полной
41+
схемы конфига сигнатуры стоит типизировать.
3442

3543
**Итого:** два тонких бага дефолтов (падение на missing key и затирание falsy-значений)
3644
+ мутация общего списка. Мораль: `if value:` ≠ «ключ задан»; и общие мутабельные дефолты кусаются.

0 commit comments

Comments
 (0)