Ich suche nach praktischen und nicht synthetischen Anwendungsfällen von Python-Klassendekorateuren. Bisher war der einzige Fall, der für mich sinnvoll war, die Registrierung einer Klasse in einem Publisher-Subscriber-System, z. B. Plugins oder Events, wie z.
@register
class MyPlugin(Plugin):
pass
oder
@recieves_notifications
class Console:
def print(self, text):
...
Alle anderen vernünftigen Fälle, an die ich gedacht habe, könnten auf Vererbung, Metaklassen oder Dekorationsmethoden aufbauen. Könnten Sie bitte gute (oder schlechte!) Beispiele für die Verwendung von Klassendekorateuren nennen?
Vielen Dank!
ABCMeta
keinen@abstractclass
Klassendekorateur haben.Antworten:
Beim Schreiben von Komponententests mit dem
@unittest.skipIf
und@unittest.skipUnless
können entweder einzelne Methoden oder eine gesamteunittest.TestCase
Klassendefinition verwendet werden. Dies erleichtert das Schreiben von Tests für plattformspezifische Probleme erheblich.Beispiel aus
asyncio/test_selectors
quelle
Klassendekorateure wurden explizit erstellt, um einige Dinge, die bereits über Metaklassen ausgedrückt werden konnten, aus dem PEP angenehmer zu machen :
quelle
Aus dieser Stapelüberlauffrage:
quelle
Die Suche nach Anwendungsfällen, die mit Dekorateuren in Klassen durchgeführt werden können, ist zwecklos - alles , was mit Dekorateuren in Klassen durchgeführt werden kann, kann mit Metaklassen durchgeführt werden. Sogar Ihr Beispiel für die Registrierung. Um dies zu beweisen, ist hier eine Metaklasse, die einen Dekorateur anwendet:
Python 2:
Python 3:
quelle