123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from dataclasses import dataclass, field
- @dataclass
- class Person:
- first_name: str
- last_name: str
- age: int = field(default=20)
- full_name: str = field(init=False)
- def __post_init__(self):
- self.full_name = f'{self.first_name} {self.last_name}'
- self.is_programmer = True
-
- def test_1():
- artem = Person('Artem', 'Egorov')
- print(artem)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Сортировка
- @dataclass(order=True)
- class PersonSort:
- sort_index: int = field(init=False, repr=False)
- name: str
- age: int
- weight: int = 190
- def __post_init__(self):
- self.sort_index = (self.weight, self.age)
- def test_2():
- persons = [
- PersonSort('Иван', 25, 200),
- PersonSort('Петр', 30, 150),
- PersonSort('Кирилл', 35, 150),
- PersonSort('Борис', 20, 200),
- PersonSort('Алексей', 15, 200),
- PersonSort('Дмитрий', 11, 175),
- ]
- print(*sorted(persons), sep='\n')
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Наследование dataclass
- # Если родительский класс имеет поле или несколько полей по умолчанию, то
- # все поля в дочернем классе должны иметь значения по умолчанию.
- @dataclass
- class Person:
- first_name: str
- last_name: str
- age: int = field(default=20)
- @dataclass
- class Student(Person):
- course: int = 1
- stipend: int = 1000
- def main():
- # test_1()
- test_2()
- if __name__ == '__main__':
- main()
|