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()