Skip to content

Commit 5491ccc

Browse files
committed
added decorator dataclass
1 parent 6527aba commit 5491ccc

File tree

1 file changed

+74
-7
lines changed

1 file changed

+74
-7
lines changed

11_decorator_closure.ipynb

Lines changed: 74 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@
194194
"greet()"
195195
]
196196
},
197-
{
197+
{
198198
"cell_type": "markdown",
199199
"metadata": {},
200200
"source": [
@@ -205,10 +205,25 @@
205205
"- `@classmethod`\n",
206206
"- `@property`\n",
207207
"\n",
208-
"Qui vengono mostrati alcuni esempi:"
208+
"#### `@staticmethod`\n",
209+
"- Trasforma un metodo in una funzione \"normale\" contenuta nella classe.\n",
210+
"- Non riceve automaticamente `self` (istanza) o `cls` (classe).\n",
211+
"- Utile per funzioni di utilità legate logicamente alla classe ma che non usano i dati della classe.\n",
212+
"\n",
213+
"#### `@classmethod`\n",
214+
"- Definisce un metodo che riceve la **classe** come primo argomento, chiamato `cls`.\n",
215+
"- Utile per creare metodi costruttori alternativi o lavorare su dati di classe.\n",
216+
"- Funziona correttamente anche con le classi derivate.\n",
217+
"\n",
218+
"#### `@property`\n",
219+
"- Permette di definire attributi controllati: si accede a un metodo come se fosse una variabile.\n",
220+
"- Migliora l'incapsulamento senza cambiare l'interfaccia dell'oggetto.\n",
221+
"- Può avere un getter, un setter (`@<nome>.setter`) e un deleter (`@<nome>.deleter`).\n",
222+
"\n",
223+
"### Esempio:"
209224
]
210-
},
211-
{
225+
},
226+
{
212227
"cell_type": "code",
213228
"execution_count": null,
214229
"metadata": {},
@@ -237,12 +252,64 @@
237252
" return cls(1)\n",
238253
"\n",
239254
"c = Circle(5)\n",
240-
"print(c.radius)\n",
255+
"print('Initial radius:', c.radius)\n",
256+
"\n",
257+
"# setter usage\n",
258+
"c.radius = 10\n",
259+
"print('Updated radius:', c.radius)\n",
260+
"\n",
261+
"# isntance method usage\n",
241262
"Circle.info()\n",
263+
"\n",
264+
"# classmethod usage\n",
242265
"unit = Circle.unit_circle()\n",
243-
"print(unit.radius)"
266+
"print('Unit circle radius:', unit.radius)\n"
244267
]
245-
},
268+
},
269+
{
270+
"cell_type": "markdown",
271+
"metadata": {},
272+
"source": [
273+
"## 🧩 `@dataclass`: decorator per creare classi \"automatiche\"\n",
274+
"\n",
275+
"Il decorator `@dataclass`, introdotto in Python 3.7, permette di generare automaticamente diversi metodi di una classe, come:\n",
276+
"- `__init__`\n",
277+
"- `__repr__`\n",
278+
"- `__eq__`\n",
279+
"- (opzionale) metodi di confronto: `<`, `<=`, `>`\n",
280+
"\n",
281+
"È utile per rappresentare strutture dati senza dover scrivere molto codice boilerplate.\n",
282+
"\n",
283+
"Basta applicare `@dataclass` sopra la classe e definire gli attributi come variabili di classe.\n",
284+
"\n",
285+
"Si può configurare con parametri come:\n",
286+
"- `frozen=True` → crea oggetti immutabili\n",
287+
"- `order=True` → abilita i confronti (`<`, `>=`, ...)\n",
288+
"- `default` / `default_factory` → valori di default\n",
289+
"\n",
290+
"### Esempio:"
291+
]
292+
},
293+
{
294+
"cell_type": "code",
295+
"execution_count": null,
296+
"metadata": {},
297+
"outputs": [],
298+
"source": [
299+
"from dataclasses import dataclass\n",
300+
"\n",
301+
"@dataclass\n",
302+
"class Point:\n",
303+
" x: float\n",
304+
" y: float\n",
305+
"\n",
306+
"p1 = Point(3, 4)\n",
307+
"p2 = Point(3, 4)\n",
308+
"\n",
309+
"print('Point:', p1) # __repr__\n",
310+
"print('Are equal?', p1 == p2) # __eq__\n"
311+
]
312+
},
246313
{
247314
"cell_type": "markdown",
248315
"metadata": {},

0 commit comments

Comments
 (0)