Überschreibt einen geerbten Eigenschaften-Setter

8

Ich habe eine Klasse namens Node mit einem importance setter und Getter, unten:

%Vor%

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 ?

hinzufügen?

Ich habe versucht, es so zu machen:

%Vor%     
mareoraft 09.08.2015, 21:38
quelle

3 Antworten

6

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:

%Vor%

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).

    
Markus Meskanen 09.08.2015, 21:56
quelle
3

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:

%Vor%

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 ) .

    
jonrsharpe 09.08.2015 21:58
quelle
1

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 und Node , bis importance   ist besorgt, dass ein Theorem ein importance von mindestens 3 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 .

    
jonrsharpe 10.08.2015 13:23
quelle

Tags und Links