dataclass_3.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from dataclasses import dataclass, field
  2. @dataclass
  3. class Person:
  4. first_name: str
  5. last_name: str
  6. age: int = field(default=20)
  7. full_name: str = field(init=False)
  8. def __post_init__(self):
  9. self.full_name = f'{self.first_name} {self.last_name}'
  10. self.is_programmer = True
  11. def test_1():
  12. artem = Person('Artem', 'Egorov')
  13. print(artem)
  14. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  15. # Сортировка
  16. @dataclass(order=True)
  17. class PersonSort:
  18. sort_index: int = field(init=False, repr=False)
  19. name: str
  20. age: int
  21. weight: int = 190
  22. def __post_init__(self):
  23. self.sort_index = (self.weight, self.age)
  24. def test_2():
  25. persons = [
  26. PersonSort('Иван', 25, 200),
  27. PersonSort('Петр', 30, 150),
  28. PersonSort('Кирилл', 35, 150),
  29. PersonSort('Борис', 20, 200),
  30. PersonSort('Алексей', 15, 200),
  31. PersonSort('Дмитрий', 11, 175),
  32. ]
  33. print(*sorted(persons), sep='\n')
  34. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  35. # Наследование dataclass
  36. # Если родительский класс имеет поле или несколько полей по умолчанию, то
  37. # все поля в дочернем классе должны иметь значения по умолчанию.
  38. @dataclass
  39. class Person:
  40. first_name: str
  41. last_name: str
  42. age: int = field(default=20)
  43. @dataclass
  44. class Student(Person):
  45. course: int = 1
  46. stipend: int = 1000
  47. def main():
  48. # test_1()
  49. test_2()
  50. if __name__ == '__main__':
  51. main()