Ich habe eine Klasse namens Node
mit einem importance
setter und Getter, unten:
Später habe ich eine Klasse Theorem
, die von Node
erbt. Der einzige Unterschied zwischen einem Theorem
und einem Node
, was importance
betrifft, ist, dass ein Theorem
ein importance
von mindestens 3
haben muss.
Wie kann ein Theorem den Vererber übernehmen, aber die zusätzliche Bedingung importance
?
Ich habe versucht, es so zu machen:
%Vor% Sie können auf die vorhandene Eigenschaft direkt über die Klasse Node
verweisen und die Methode setter
der Eigenschaft verwenden, um daraus eine neue Eigenschaft zu erstellen:
Dadurch wird eine neue Eigenschaft in der Klasse Theorem
erstellt, die die Getter-Methode von Node.importance
verwendet, die Setter-Methode jedoch durch eine andere ersetzt.
So funktionieren Eigenschaften im Allgemeinen: Der Aufruf des setter
einer Eigenschaft gibt eine neue Eigenschaft mit einem benutzerdefinierten Setter zurück, der normalerweise nur die alte Eigenschaft ersetzt.
Sie können mehr über die Funktionsweise von Eigenschaften erfahren, indem Sie diese Antwort lesen (und auch die Frage).
Eine Möglichkeit besteht darin, eine neue Eigenschaft in Theorem
mit dem% get_ter% code zu implementieren, eine neue Setter-Methode bereitzustellen und den Node
setter explizit darin aufzurufen:
Soweit mir bekannt ist, kann dies nicht mit Node
gemacht werden.
Pro dieser Fehlerbericht könnten Sie Folgendes tun:
%Vor% Dies ist jedoch eindeutig ein wenig peinlich; Der Patch für super
scheint stattdessen für Python 3.5 geplant zu sein (fällig in September 2015 ) .
Hier ist eine völlig andere Lösung für das breitere Problem, mit viel weniger herumfuchteln:
%Vor%Das drückt sich meiner Meinung nach aus:
Der einzige Unterschied zwischen
Theorem
undNode
, bisimportance
ist besorgt, dass einTheorem
einimportance
von mindestens3
haben muss.
viel deutlicher als das Überschreiben des Property Setter.
Beachten Sie, dass assert
im Allgemeinen zum Testen und Debuggen verwendet wird und nicht als Teil des allgemeinen Programmablaufs und sicherlich nicht für Dinge, von denen Sie erwarten können, dass passieren könnte ; siehe z.B. Best Practice für Python Assert .
Tags und Links python inheritance oop python-3.x