-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path01_dataclasses.py
More file actions
31 lines (23 loc) · 1.25 KB
/
Copy path01_dataclasses.py
File metadata and controls
31 lines (23 loc) · 1.25 KB
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
"""
Тема: dataclasses (см. theory/python.md → «Что нового в Python»).
Перепиши класс Point ниже через @dataclass так, чтобы код-проверка внизу прошёл:
- поля x, y (int), tag (str) со значением по умолчанию 'origin';
- сравнение по значению (__eq__);
- экземпляр должен быть хэшируемым (пригоден как ключ set/dict);
- поле history: list[str] с дефолтом пустой список — но без бага мутабельного дефолта.
Подумай: почему dataclass(frozen=True) автоматически хэшируемый и зачем
field(default_factory=...) вместо default=[].
"""
from dataclasses import dataclass
class Point: # todo: переписать через @dataclass
pass
a = Point(1, 2)
b = Point(1, 2)
c = Point(3, 4, tag='corner')
assert a == b, 'сравнение по значению'
assert a != c
assert len({a, b, c}) == 2, 'должно быть хэшируемым и a == b'
assert c.tag == 'corner'
assert Point(0, 0).tag == 'origin'
assert Point(0, 0).history == [] and Point(0, 0).history is not Point(0, 0).history
print('ok')