Haftungsausschluss:Wie kann man zwischen Funktionen wechseln, abhängig vom Attributzugriffstyp (mit Klasse oder Instanz)?
Dieser Artikel ist ein Rezept als eine Frage, aber ich fand sehr interessant das Thema, mit fast keine Referenzen im Web.
Wenn es einen besseren Ort auf StackOverflow gibt, um diese Art von Artikeln zu veröffentlichen, lassen Sie es mich bitte wissen.
Betreff:
Wie kann ich Python zwingen andere Funktion aufzurufen auf dem Attributtyp Zugriff abhängig (mit Klasse oder Instanz) - z.B. Erzwingen Python, unterschiedliche Methode für MyClass.my_method()
und MyClass().my_method()
aufzurufen?
Usecase:
Sagen wir mal, wir individuelle Enum Implementierung haben (basierend auf Python36 Enum, aber mit etwas Anpassung). Als Benutzer dieser Enum möchten wir ein CustomEnum erstellen, das nicht nur von Enum, sondern auch von str abgeleitet wird: class MyEnum(str, Enum)
. Wir möchten auch die Encoding- und Decoding-Funktion hinzufügen. Unsere Idee ist, MyEnum.encode
zu verwenden, um irgendein Objekt zu kodieren, das unsere enum-Mitglieder enthält, aber das ursprüngliche str.encode
für Instanzen unserer enum-Klasse in Kraft zu lassen. Kurz gesagt: MyEnum.encode
rufen Sie unsere benutzerdefinierte Encoding-Funktion, und haben von diesem Standpunkt aus perfektes Gefühl. MyEnum()
ist eine Zeichenfolge, daher sollte MyEnum().encode
die von der str-Klasse geerbte encode-Funktion aufrufen.
Lösung:
einen Descriptor schreiben, die als Schalter arbeiten. Volle Antwort in meinem ersten Beitrag.
Bitte geben Sie die Lösung Teil als Antwort posten. – Gabriel
Sie können es im Dokumentationsabschnitt von SO (http://stackoverflow.com/documentation) veröffentlichen. Oder Sie können Ihre Frage nur auf den Problembereich beschränken und selbst mit dem Lösungsabschnitt antworten –
@utsav_deep - Wie kann ich meine Antwort nur auf ein Problem beschränken? Gibt es dafür eine Option? Sorry für noob Frage, das sind meine ersten Schritte auf StackOverflow. –