Sobes.tech
Middle

Come si comportano le funzioni come oggetti in Python? Metaclassi?

sobes.tech AI

Risposta dell'AI

In Python, le funzioni sono oggetti di prima classe a tutti gli effetti. Ciò significa che le funzioni possono:

  • Assegnate a variabili
  • Passate come argomenti ad altre funzioni
  • Restituite da funzioni
  • Avere attributi e metodi

Ad esempio, una funzione ha un attributo __name__ e si possono aggiungere dinamicamente i propri attributi:

def greet(name):
    return f"Hello, {name}!"

greet.description = "Funzione di saluto"
print(greet.description)  # Mostrerà: Funzione di saluto

Le metaclassi sono classi che creano classi. In Python, tutte le classi sono oggetti create da una metaclasse (di default type). Le metaclassi permettono di controllare la creazione delle classi, ad esempio modificando attributi o comportamenti durante la loro definizione.

Esempio di una metaclasse semplice:

class Meta(type):
    def __new__(cls, name, bases, dct):
        dct['custom_attr'] = 'Aggiunto dalla metaclasse'
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass

print(MyClass.custom_attr)  # Mostrerà: Aggiunto dalla metaclasse

In questo modo, le funzioni in Python sono oggetti con attributi propri, e le metaclassi sono strumenti potenti per gestire la creazione dinamica delle classi.