TelenkovDmitry 6 tháng trước cách đây
mục cha
commit
33a3b6a4bc

+ 78 - 0
courses/python_oop/data_class/dataclass_1.py

@@ -0,0 +1,78 @@
+from dataclasses import dataclass, make_dataclass, is_dataclass, field
+from typing import List, Any
+
+@dataclass
+class Book:
+    title: str
+    author: str
+
+
+@dataclass
+class InventoryItem:
+    name: str
+    quantity: int = field(default=1)
+    price: float = field(default=9.99)
+
+@dataclass
+class ProgramStaff:
+    items: List[InventoryItem]
+    # Или после python 3.10
+    # items: list[InventoryItem]
+
+
+@dataclass
+class A:
+    name: Any
+    value: Any = 42
+
+
+# Создание класса через make_dataclass
+def test_1():
+    Person = make_dataclass('Person', ['firs_name', 'last_name', 'age'])
+    artem = Person('Artem', 'Egorov', 33)
+    print(artem)
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+@dataclass
+class Student:
+    name: str
+    surname: str
+    student_id: int
+    faculty: str
+    specialty: str
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+@dataclass
+class Point:
+    x: int
+    y: int
+
+def test_2():
+    point1 = Point(5, 7)
+    point2 = Point(-10, 12)
+    print(point1)
+    print(point2)
+
+    assert is_dataclass(Point), 'Point is not dataclass'
+    assert isinstance(point1, Point)
+    assert isinstance(point2, Point)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+
+def main():
+    
+    # book = Book('asdf', 'asdfas')
+    # print(book)
+
+    # test_1()
+    test_2()
+
+
+if __name__ == '__main__':
+    main()

+ 61 - 0
courses/python_oop/data_class/dataclass_2.py

@@ -0,0 +1,61 @@
+from dataclasses import dataclass, field
+from random import choice
+from typing import Optional
+
+
+def choice_color():
+    print('Start choice')
+    colors = ['black', 'white', 'red', 'green']
+    return choice(colors)
+
+@dataclass
+class InventoryItem:
+    name: str
+    quantity: int = field(default=1)
+    price: float = field(default=9.99)
+    color: str = field(default_factory=choice_color)
+
+
+def test_1():
+    desk = InventoryItem('Computer desk')
+    print(desk)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+'''Если нужен пустой список'''
+@dataclass
+class MyDataclass:
+    foo: str = field(default_factory=list)
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+@dataclass
+class Location:
+    name: str
+    longitude: float = field(default=0)
+    latitude: float = field(default=11.5)
+
+
+def test_2():
+
+    stonehenge = Location('Stonehenge', 51, 1.5)
+    print(stonehenge)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+@dataclass
+class Person:
+    first_name: str
+    last_name: str
+    hobbies: set = field(default_factory=set)
+
+
+
+def main():
+    # test_1()
+    test_2()
+
+
+if __name__ == '__main__':
+    main()

+ 4 - 0
courses/python_oop/data_class/misc.py

@@ -0,0 +1,4 @@
+my_1 = lambda: 20
+my_2 = lambda x: x**2
+
+print(my_1())