1
+ {
2
+ "nbformat" : 4 ,
3
+ "nbformat_minor" : 0 ,
4
+ "metadata" : {
5
+ "colab" : {
6
+ "provenance" : [],
7
+ "toc_visible" : true
8
+ },
9
+ "kernelspec" : {
10
+ "name" : " python3" ,
11
+ "display_name" : " Python 3"
12
+ },
13
+ "language_info" : {
14
+ "name" : " python"
15
+ }
16
+ },
17
+ "cells" : [
18
+ {
19
+ "cell_type" : " markdown" ,
20
+ "source" : [
21
+ " ## **`dataclasses`**"
22
+ ],
23
+ "metadata" : {
24
+ "id" : " XE_IcA4YSc-F"
25
+ }
26
+ },
27
+ {
28
+ "cell_type" : " code" ,
29
+ "source" : [
30
+ " from dataclasses import dataclass\n " ,
31
+ " \n " ,
32
+ " @dataclass\n " ,
33
+ " class Person:\n " ,
34
+ " name: str\n " ,
35
+ " age: int\n " ,
36
+ " city: str\n " ,
37
+ " \n " ,
38
+ " # Creating an instance of the Person dataclass\n " ,
39
+ " person = Person(name=\" Alice\" , age=30, city=\" New York\" )\n " ,
40
+ " \n " ,
41
+ " # Accessing the fields\n " ,
42
+ " print(person.name) # Output: Alice\n " ,
43
+ " print(person.age) # Output: 30\n " ,
44
+ " print(person.city) # Output: New York"
45
+ ],
46
+ "metadata" : {
47
+ "colab" : {
48
+ "base_uri" : " https://localhost:8080/"
49
+ },
50
+ "id" : " 9KpkWmtTCmbd" ,
51
+ "outputId" : " 07ed2ee3-e954-40f9-f2bf-425ad55b67a7"
52
+ },
53
+ "execution_count" : 1 ,
54
+ "outputs" : [
55
+ {
56
+ "output_type" : " stream" ,
57
+ "name" : " stdout" ,
58
+ "text" : [
59
+ " Alice\n " ,
60
+ " 30\n " ,
61
+ " New York\n "
62
+ ]
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "cell_type" : " code" ,
68
+ "source" : [
69
+ " from dataclasses import dataclass\n " ,
70
+ " \n " ,
71
+ " @dataclass\n " ,
72
+ " class Address:\n " ,
73
+ " street: str\n " ,
74
+ " city: str\n " ,
75
+ " zipcode: str\n " ,
76
+ " \n " ,
77
+ " @dataclass\n " ,
78
+ " class Person:\n " ,
79
+ " name: str\n " ,
80
+ " age: int\n " ,
81
+ " address: Address\n " ,
82
+ " \n " ,
83
+ " # Creating an instance of the Address class\n " ,
84
+ " address1 = Address(street=\" 123 Main St\" , city=\" New York\" , zipcode=\" 10001\" )\n " ,
85
+ " \n " ,
86
+ " # Creating an instance of the Person class with the Address instance\n " ,
87
+ " person1 = Person(name=\" Alice\" , age=30, address=address1)\n " ,
88
+ " \n " ,
89
+ " # Accessing the nested attributes\n " ,
90
+ " print(person1.address.city) # Output: New York"
91
+ ],
92
+ "metadata" : {
93
+ "colab" : {
94
+ "base_uri" : " https://localhost:8080/"
95
+ },
96
+ "id" : " N1V7ZtvFlsGs" ,
97
+ "outputId" : " 5aaa41b0-82e4-4037-f80f-3f4f8c7584c5"
98
+ },
99
+ "execution_count" : 2 ,
100
+ "outputs" : [
101
+ {
102
+ "output_type" : " stream" ,
103
+ "name" : " stdout" ,
104
+ "text" : [
105
+ " New York\n "
106
+ ]
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "cell_type" : " code" ,
112
+ "source" : [
113
+ " from dataclasses import dataclass, field\n " ,
114
+ " \n " ,
115
+ " @dataclass\n " ,
116
+ " class Product:\n " ,
117
+ " name: str\n " ,
118
+ " price: float\n " ,
119
+ " in_stock: bool = True\n " ,
120
+ " tags: list = field(default_factory=list)\n " ,
121
+ " \n " ,
122
+ " # Creating an instance of the Product class\n " ,
123
+ " product1 = Product(name=\" Laptop\" , price=999.99)\n " ,
124
+ " \n " ,
125
+ " # Accessing the attributes\n " ,
126
+ " print(product1.name) # Output: Laptop\n " ,
127
+ " print(product1.in_stock) # Output: True\n " ,
128
+ " print(product1.tags) # Output: []\n " ,
129
+ " \n " ,
130
+ " # Adding a tag to the product\n " ,
131
+ " product1.tags.append(\" Electronics\" )\n " ,
132
+ " print(product1.tags)"
133
+ ],
134
+ "metadata" : {
135
+ "colab" : {
136
+ "base_uri" : " https://localhost:8080/"
137
+ },
138
+ "id" : " z1312whblx0i" ,
139
+ "outputId" : " 700cd896-488a-4627-d111-58d2813ab8dc"
140
+ },
141
+ "execution_count" : 3 ,
142
+ "outputs" : [
143
+ {
144
+ "output_type" : " stream" ,
145
+ "name" : " stdout" ,
146
+ "text" : [
147
+ " Laptop\n " ,
148
+ " True\n " ,
149
+ " []\n " ,
150
+ " ['Electronics']\n "
151
+ ]
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "cell_type" : " markdown" ,
157
+ "source" : [
158
+ " In this example, the `Person` class is defined as a `dataclass` with three fields: `name`, `age`, and `city`. The `dataclass` decorator automatically generates special methods like `__init__()`and `__repr__()` for the class, making it easier to work with.\n " ,
159
+ " \n " ,
160
+ " - The `__init__` method in Python is a **special method** used to initialize the attributes of an object when it is created. It’s often referred to as a constructor. When you create a new instance of a class, Python automatically calls the `__init__` method to set up the initial state of the object.\n " ,
161
+ " \n " ,
162
+ " - The `__repr__` method in Python is a **special method** used to define the string representation of an object."
163
+ ],
164
+ "metadata" : {
165
+ "id" : " huCxk1dfCuey"
166
+ }
167
+ },
168
+ {
169
+ "cell_type" : " code" ,
170
+ "source" : [
171
+ " class Person:\n " ,
172
+ " def __init__(self, name: str, age: int, city: str):\n " ,
173
+ " self.name = name\n " ,
174
+ " self.age = age\n " ,
175
+ " self.city = city\n " ,
176
+ " \n " ,
177
+ " def __repr__(self):\n " ,
178
+ " return f\" Person(name={self.name}, age={self.age}, city={self.city})\"\n " ,
179
+ " \n " ,
180
+ " # Creating an instance of the Person class\n " ,
181
+ " person = Person(name=\" Alice\" , age=30, city=\" New York\" )\n " ,
182
+ " \n " ,
183
+ " # Accessing the fields\n " ,
184
+ " print(person.name) # Output: Alice\n " ,
185
+ " print(person.age) # Output: 30\n " ,
186
+ " print(person.city) # Output: New York"
187
+ ],
188
+ "metadata" : {
189
+ "colab" : {
190
+ "base_uri" : " https://localhost:8080/"
191
+ },
192
+ "id" : " GQngSHM6Dl8M" ,
193
+ "outputId" : " 4605dca3-1aa3-4bed-87f6-74ae7d453501"
194
+ },
195
+ "execution_count" : 4 ,
196
+ "outputs" : [
197
+ {
198
+ "output_type" : " stream" ,
199
+ "name" : " stdout" ,
200
+ "text" : [
201
+ " Alice\n " ,
202
+ " 30\n " ,
203
+ " New York\n "
204
+ ]
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ "cell_type" : " markdown" ,
210
+ "source" : [
211
+ " If you don’t use `dataclasses`, you would typically define a class with an `__init__` method to initialize the attributes.\n " ,
212
+ " \n " ,
213
+ " \n " ,
214
+ " >The `@dataclass` decorator in Python is used to automatically generate special methods for classes, such as `__init__()`, `__repr__()`, `__eq__()`, and others. **This helps reduce boilerplate code and makes it easier to create classes that are primarily used to store data.**"
215
+ ],
216
+ "metadata" : {
217
+ "id" : " nrEN6XXfDrmu"
218
+ }
219
+ },
220
+ {
221
+ "cell_type" : " markdown" ,
222
+ "source" : [
223
+ " ## **`typing`**\n " ,
224
+ " \n " ,
225
+ " \n " ,
226
+ " The `from typing import List` statement in Python is used to import the `List` type hint from the `typing` module. This allows you to specify the type of elements that a list should contain, which can be very helpful for code readability and for tools like type checkers and IDEs to provide better support and error checking.\n " ,
227
+ " \n " ,
228
+ " Here’s an example of how it’s used:"
229
+ ],
230
+ "metadata" : {
231
+ "id" : " rqWqyDyvTzpB"
232
+ }
233
+ },
234
+ {
235
+ "cell_type" : " code" ,
236
+ "source" : [
237
+ " from typing import List\n " ,
238
+ " \n " ,
239
+ " def sum_of_elements(elements: List[int]) -> int:\n " ,
240
+ " return sum(elements)\n " ,
241
+ " \n " ,
242
+ " numbers = [1, 2, 3, 4, 5]\n " ,
243
+ " print(sum_of_elements(numbers))"
244
+ ],
245
+ "metadata" : {
246
+ "colab" : {
247
+ "base_uri" : " https://localhost:8080/"
248
+ },
249
+ "id" : " BFLobiRkT1-y" ,
250
+ "outputId" : " ba1d8255-440b-4156-ea80-d909490fd764"
251
+ },
252
+ "execution_count" : 5 ,
253
+ "outputs" : [
254
+ {
255
+ "output_type" : " stream" ,
256
+ "name" : " stdout" ,
257
+ "text" : [
258
+ " 15\n "
259
+ ]
260
+ }
261
+ ]
262
+ },
263
+ {
264
+ "cell_type" : " code" ,
265
+ "source" : [
266
+ " from typing import Dict\n " ,
267
+ " \n " ,
268
+ " def get_student_grades() -> Dict[str, int]:\n " ,
269
+ " return {\" Alice\" : 90, \" Bob\" : 85, \" Charlie\" : 92}\n " ,
270
+ " \n " ,
271
+ " grades = get_student_grades()\n " ,
272
+ " print(grades)"
273
+ ],
274
+ "metadata" : {
275
+ "colab" : {
276
+ "base_uri" : " https://localhost:8080/"
277
+ },
278
+ "id" : " SSzIFknblN-6" ,
279
+ "outputId" : " ebe04324-e55a-4a25-96ed-8061aafb3120"
280
+ },
281
+ "execution_count" : 6 ,
282
+ "outputs" : [
283
+ {
284
+ "output_type" : " stream" ,
285
+ "name" : " stdout" ,
286
+ "text" : [
287
+ " {'Alice': 90, 'Bob': 85, 'Charlie': 92}\n "
288
+ ]
289
+ }
290
+ ]
291
+ },
292
+ {
293
+ "cell_type" : " code" ,
294
+ "source" : [
295
+ " from typing import Union\n " ,
296
+ " \n " ,
297
+ " def process_data(data: Union[int, str]) -> str:\n " ,
298
+ " if isinstance(data, int):\n " ,
299
+ " return f\" Processed number: {data}\"\n " ,
300
+ " elif isinstance(data, str):\n " ,
301
+ " return f\" Processed string: {data}\"\n " ,
302
+ " \n " ,
303
+ " print(process_data(10)) # Output: Processed number: 10\n " ,
304
+ " print(process_data(\" hello\" )) # Output: Processed string: hello\n "
305
+ ],
306
+ "metadata" : {
307
+ "colab" : {
308
+ "base_uri" : " https://localhost:8080/"
309
+ },
310
+ "id" : " nq_kZmBWlZc6" ,
311
+ "outputId" : " 37816c45-9070-497f-eb1d-ecaaa3858170"
312
+ },
313
+ "execution_count" : 7 ,
314
+ "outputs" : [
315
+ {
316
+ "output_type" : " stream" ,
317
+ "name" : " stdout" ,
318
+ "text" : [
319
+ " Processed number: 10\n " ,
320
+ " Processed string: hello\n "
321
+ ]
322
+ }
323
+ ]
324
+ },
325
+ {
326
+ "cell_type" : " code" ,
327
+ "source" : [
328
+ " from typing import Optional\n " ,
329
+ " \n " ,
330
+ " def find_user(user_id: int) -> Optional[str]:\n " ,
331
+ " users = {1: \" Alice\" , 2: \" Bob\" , 3: \" Charlie\" }\n " ,
332
+ " return users.get(user_id)\n " ,
333
+ " \n " ,
334
+ " print(find_user(1)) # Output: Alice\n " ,
335
+ " print(find_user(4)) # Output: None\n "
336
+ ],
337
+ "metadata" : {
338
+ "colab" : {
339
+ "base_uri" : " https://localhost:8080/"
340
+ },
341
+ "id" : " 0CfFra8rlaxr" ,
342
+ "outputId" : " c196b561-96dd-4a49-a4f5-3a8e30609135"
343
+ },
344
+ "execution_count" : 8 ,
345
+ "outputs" : [
346
+ {
347
+ "output_type" : " stream" ,
348
+ "name" : " stdout" ,
349
+ "text" : [
350
+ " Alice\n " ,
351
+ " None\n "
352
+ ]
353
+ }
354
+ ]
355
+ },
356
+ {
357
+ "cell_type" : " code" ,
358
+ "source" : [
359
+ " from typing import Callable\n " ,
360
+ " \n " ,
361
+ " def execute_function(func: Callable[[int, int], int], a: int, b: int) -> int:\n " ,
362
+ " return func(a, b)\n " ,
363
+ " \n " ,
364
+ " def add(x: int, y: int) -> int:\n " ,
365
+ " return x + y\n " ,
366
+ " \n " ,
367
+ " def multiply(x: int, y: int) -> int:\n " ,
368
+ " return x * y\n " ,
369
+ " \n " ,
370
+ " print(execute_function(add, 2, 3)) # Output: 5\n " ,
371
+ " print(execute_function(multiply, 2, 3)) # Output: 6"
372
+ ],
373
+ "metadata" : {
374
+ "colab" : {
375
+ "base_uri" : " https://localhost:8080/"
376
+ },
377
+ "id" : " TzSljUHPlb6h" ,
378
+ "outputId" : " b1a35987-7a64-4081-e74f-07aebad6110e"
379
+ },
380
+ "execution_count" : 9 ,
381
+ "outputs" : [
382
+ {
383
+ "output_type" : " stream" ,
384
+ "name" : " stdout" ,
385
+ "text" : [
386
+ " 5\n " ,
387
+ " 6\n "
388
+ ]
389
+ }
390
+ ]
391
+ }
392
+ ]
393
+ }
0 commit comments