TelenkovDmitry hace 6 meses
padre
commit
0c78f05050
Se han modificado 1 ficheros con 69 adiciones y 0 borrados
  1. 69 0
      courses/python_oop/data_class/dataclass_3.py

+ 69 - 0
courses/python_oop/data_class/dataclass_3.py

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