Conținut curs
Python Avansat
Despre lecție
  1. Recapitulare a metaclasselor

    • Reamintirea conceptului de metaclass
    • Scopul și utilizarea metaclasselor în Python
  2. Metaclasselor și moștenirea

    • Moștenirea în contextul metaclasselor
    • Metaclasselor compuse și ordinea rezoluției
  3. Înregistrarea claselor cu metaclasselor

    • Utilizarea metaclasselor pentru a înregistra automat clasele
    • Implementarea unui registru de clase cu exemple practice
  4. Validarea atributelor și a metodelor cu metaclasselor

    • Utilizarea metaclasselor pentru a impune restricții asupra atributelor și metodelor claselor
    • Implementarea unui sistem de validare a atributelor și metodelor
  5. Gestionarea automată a proprietăților cu metaclasselor

    • Crearea de proprietăți automat cu metaclasselor
    • Exemplu de implementare a unei metaclass pentru gestionarea proprietăților
  6. Metaclasselor și Singleton

    • Implementarea pattern-ului Singleton cu metaclasselor
    • Discuții și exemple de utilizări Singleton în Python
  7. Recapitulare și bune practici

    • Rezumatul lecției și a tehnicilor prezentate
    • Bune practici pentru utilizarea metaclasselor în Python

Exemple și exerciții pentru fiecare subpunct:

Exemplu: Metaclasselor și moștenirea

python
class MetaA(type):
    def salut(cls):
        return f"Salut de la {cls.__name__}!"

class MetaB(MetaA):
    pass

class ClasaA(metaclass=MetaA):
    pass

class ClasaB(metaclass=MetaB):
    pass

print(ClasaA.salut())
print(ClasaB.salut())

Exercițiu:

Creați două metaclass-uri care să moștenească una de la cealaltă și să adauge câte un atribut diferit în clasele pe care le generează.

Exemplu: Înregistrarea claselor cu metaclass-uri

python
class RegistryMeta(type):
    registry = {}

    def __new__(mcs, name, bases, attrs):
        cls = super().__new__(mcs, name, bases, attrs)
        mcs.registry[name] = cls
        return cls

class A(metaclass=RegistryMeta):
    pass

class B(A):
    pass

print(RegistryMeta.registry)

Exercițiu:

Creați un sistem de înregistrare a claselor care să stocheze și numărul de instanțe create pentru fiecare clasă.

Exemplu: Validarea atributelor și a metodelor cu metaclass-uri

python
class ValidatingMeta(type):
    def __new__(mcs, name, bases, attrs):
        if "atribut_obligatoriu" not in attrs:
            raise AttributeError(f"{name} trebuie să aibă un atribut 'atribut_obligatoriu'")
        return super().__new__(mcs, name, bases, attrs)

class ClasaValida(metaclass=ValidatingMeta):
    atribut_obligatoriu = 42

class ClasaInvalida(metaclass=ValidatingMeta):
    pass

Exercițiu:

Creați o metaclassă care să valideze că toate clasele derivate au o metodă numită salut.

Rezumat:

În această lecție, am aprofundat conceptul de metaclass-uri în Python. Am recapitulat ideea de metaclass și am explorat diferite aspecte avansate ale metaclasselor, precum moștenirea, înregistrarea claselor, validarea atributelor și metodelor, gestionarea automată a proprietăților și implementarea pattern-ului Singleton.

Am discutat despre moștenirea în contextul metaclasselor și am analizat cum se aplică metaclass-uri moștenite în crearea de clase. Am prezentat un exemplu de înregistrare automată a claselor și am arătat cum să implementăm un registru de clase.

De asemenea, am discutat despre utilizarea metaclasselor pentru a valida atributelor și metodelor claselor și am oferit exemple de implementare a sistemelor de validare. Am explorat cum să utilizăm metaclass-uri pentru a crea proprietăți în mod automat și am prezentat un exemplu de gestionare a proprietăților cu metaclass-uri.

Am abordat, de asemenea, implementarea pattern-ului Singleton cu metaclass-uri și am discutat despre cazurile de utilizare pentru Singleton în Python.

În final, am recapitulat lecția și am oferit bune practici pentru utilizarea metaclasselor în Python. Cunoștințele dobândite în această lecție ne vor ajuta să scriem cod mai eficient și să personalizăm și să extindem funcționalitatea claselor și obiectelor în moduri avansate.