Domanda

Esiste qualcosa come il protocollo descrittore Python implementato in altri linguaggi?Sembra un bel modo per aumentare la modularità/l'incapsulamento senza gonfiare l'implementazione della classe che lo contiene, ma non ho mai sentito parlare di una cosa simile in nessun altro linguaggio.È probabile che sia assente da altre lingue a causa del sovraccarico di ricerca?

È stato utile?

Soluzione

Nemmeno io ho sentito parlare di un equivalente diretto.Probabilmente potresti ottenere lo stesso effetto con le macro, specialmente in un linguaggio come Lisp che ha macro estremamente potenti.

Non sarei affatto sorpreso se altri linguaggi iniziassero a incorporare qualcosa di simile perché è così potente.

Altri suggerimenti

Ruby e C# consentono entrambi di creare facilmente funzioni di accesso specificando metodi getter/setter per un attributo, proprio come in Python.Tuttavia, questo non è progettato per consentirti di scrivere naturalmente il codice per questi metodi in un'altra classe nel modo consentito da Python.In pratica, non sono sicuro di quanto ciò sia importante, dal momento che ogni volta che ho visto un attributo definito tramite il protocollo descrittore è stato implementato nella stessa classe.

MODIFICARE:Maledetta la mia dislessia (con questo intendo la lettura imprudente).Per qualche motivo ho sempre letto "descrittore" come "decoratore" e viceversa, anche quando sono io a digitarli entrambi.Lascerò intatto il mio post poiché contiene informazioni valide, anche se informazioni che non hanno assolutamente nulla a che fare con la domanda.

Il termine stesso "decoratore" è in realtà il nome di un design pattern descritto nel famoso libro "Design Patterns".L'articolo di Wikipedia contiene molti esempi in diversi linguaggi di programmazione dell'utilizzo del decoratore: http://en.wikipedia.org/wiki/Decorator_pattern

Tuttavia, i decoratori di quell'articolo sono orientati agli oggetti;hanno classi che implementano un'interfaccia predefinita che consente a un'altra classe esistente di comportarsi diversamente in qualche modo, ecc.I decoratori Python agiscono in modo funzionale sostituendo una funzione in fase di esecuzione con un'altra funzione, consentendo di modificare/sostituire efficacemente quella funzione, inserire codice, ecc.

Questo è noto nel mondo Java come programmazione orientata agli aspetti e il compilatore Java AspectJ ti consente di fare questo tipo di cose e compilare il tuo codice AspectJ (che è un superset di Java) nel bytecode Java.

Non ho abbastanza familiarità con C# o Ruby per sapere quale sarebbe la loro versione di decoratori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top