|
@@ -0,0 +1,69 @@
|
|
|
+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()
|