2015-05-19 14 views
12

Ho compreso le basi dei decoratori e dei mixin. I decoratori aggiungono una nuova funzionalità a un oggetto senza modificare altre istanze di oggetti della stessa classe, mentre un mixin è un tipo di ereditarietà multipla utilizzata per ereditare da più classi padre.Python: uso di decoratori v/s mixin?

Significa che i decoratori dovrebbero essere utilizzati quando è necessario modificare solo una singola istanza di oggetto e utilizzare i mixin quando è necessaria una nuova classe di oggetti. Oppure, c'è qualcosa di più che potrebbe mancare? Quali possono essere casi di uso della vita reale per entrambi?

+2

Questa è una grande domanda, che mi piacerebbe conoscere la risposta, ma purtroppo sarà chiusa perché non è nell'ambito di StackOverflow. Questo perché è "principalmente basato sull'opinione pubblica" - che è una ragione primaria per la chiusura delle domande. http://stackoverflow.com/help/search?q=opinion – GreenAsJade

risposta

12

A mio parere, sono necessari mixaggi quando si dispone di alcune classi diverse che dovrebbero avere la stessa funzionalità.

I buoni esempi di utilizzo dei mix sono le viste basate su classi di Django. Ad esempio, hai alcune classi diverse: FormView, TemplateView, ListView. Tutti hanno una funzionalità simile: devono rendere modelli. Ognuna di queste classi ha un mixin, che aggiunge i metodi richiesti per il rendering del template.

Un altro esempio è se è necessario aggiungere una classe per un'API che restituisce un risultato JSON. Potrebbe anche essere ereditato da una base, classe View. Saltate semplicemente i mixin del modello e definite ciò che vi serve (e probabilmente scrivete il vostro mixin per la codifica JSON).

Inoltre, è possibile sovrascrivere alcuni dei metodi proposti nei mixin che consentono di modificare alcune parti del codice comune per il caso locale. È tutto su OOP, amico!

Per farla breve: i mixaggi aggiungono nuove funzionalità.

I decoratori sono utilizzati per modificare le funzionalità esistenti. Ad esempio, se è necessario registrare ciò che viene restituito da un metodo nella classe. La scelta giusta qui è un decoratore (aggiunto ai metodi appropriati).

Spero che sia utile. In caso contrario, si prega di fare domande. Aggiornerò la mia risposta