-
Introducere în metaprogramare
- Definiția metaprogramării și aplicațiile sale
- Domenii în care metaprogramarea poate fi utilă
-
Funcții și clase dinamice
- Crearea de funcții dinamice cu
execșieval - Crearea de clase dinamice cu
type - Avantajele și dezavantajele utilizării codului dinamic
- Crearea de funcții dinamice cu
-
Decoratori în Python
- Introducere și utilizare a decoratorilor
- Crearea de decoratori simpli
- Decoratori cu argumente
- Decoratori pentru clase și metode
-
Metaclasses în Python
- Conceptul de metaclass și rolul său în Python
- Crearea de metaclasses personalizate
- Utilizarea metaclasses pentru a personaliza procesul de creare a claselor
-
Introspecție și reflecție în Python
- Introducere în introspecție și reflecție
- Utilizarea modulului
inspectpentru a examina obiectele dinamic - Modificarea obiectelor în timpul rulării cu ajutorul reflecției
-
Recapitulare și bune practici
- Rezumatul lecției și a tehnicilor prezentate
- Bune practici pentru metaprogramare și cod dinamic
Exemple și exerciții pentru fiecare subpunct:
Exemplu: Crearea de funcții dinamice cu exec și eval
cod_sursa = '''
def salut(nume):
return f"Salut, {nume}!"
'''
exec(cod_sursa)
rezultat = salut("Mihai")
print(rezultat)
Exercițiu:
Scrieți un program care să creeze dinamic o funcție care calculează suma a două numere.
Exemplu: Crearea unei clase dinamice cu type
def init(self, nume):
self.nume = nume
def salut(self):
return f"Salut, {self.nume}!"
Persoana = type("Persoana", (object,), {"__init__": init, "salut": salut})
p = Persoana("Ana")
print(p.salut())
Exercițiu:
Creați dinamic o clasă Cerc care să conțină un atribut raza și o metodă pentru a calcula aria cercului.
Exemplu: Crearea unui decorator simplu
def afiseaza_mesaj(functie):
def wrapper():
print("Se execută funcția...")
functie()
print("Funcția s-a executat.")
return wrapper
@afiseaza_mesaj
def salut():
print("Salut!")
salut()
Exercițiu:
Creați un decorator care să cronometreze timpul de execuție al unei funcții.
Exemplu: Utilizarea metaclasselor pentru a personaliza procesul de creare a claselor
class Meta(type):
def __new__(mcs, nume, baze, atrib):
print(f"Crearea clasei {nume} cu metaclass {mcs.__name__}")
return super().__new__(mcs, nume, baze, atrib)
class Exemplu(metaclass=Meta):
pass
Exercițiu:
Creați o metaclassă care să adauge automat o metodă salut tuturor claselor create cu aceasta.
Rezumat:
În această lecție, am explorat conceptul de metaprogramare și am învățat cum să lucrăm cu cod dinamic în Python. Am discutat despre crearea de funcții și clase dinamice, utilizând exec, eval și type, și am analizat avantajele și dezavantajele utilizării codului dinamic.
Am prezentat conceptul de decoratori în Python și am arătat cum să creați decoratori simpli, cu argumente și pentru clase și metode. De asemenea, am discutatdespre metaclasses și rolul lor în personalizarea procesului de creare a claselor în Python.
Am introdus introspecția și reflecția și am arătat cum să folosim modulul inspect pentru a examina obiectele în timpul rulării și cum să modificăm obiectele dinamic cu ajutorul reflecției.
În final, am recapitulat lecția și am oferit bune practici pentru metaprogramare și cod dinamic. Cunoștințele dobândite în această lecție ne vor ajuta să scriem cod mai flexibil și să explorăm și să manipulăm obiectele și codul într-un mod mai avansat.