2010-02-03 3 views
6

Wo sollte ich Codes schreiben, um die Gültigkeit der Klasseneigenschaften zu überprüfen? (Für Beispiele: "Betrag" sollte eine positive Ganzzahl sein, "E-Mail" sollte eine Zeichenfolge mit der richtigen E-Mail-Formatierung sein) Bei den Setter-Methoden, irgendwo verwende ich das (mit try/catch) oder andere.Überprüfen der Gültigkeit von Eigenschaften in Python-Klassen

Wenn ich Gültigkeit bei Setter-Methoden überprüft, kann es (wie Typprüfung) sieht hässlich werden. Aber wenn ich es überprüfe, wenn es benutzt wird, kann doppelter Code erscheinen, wenn es viele Male benutzt wird.

(Sorry für mein schlechtes Englisch.)

Antwort

4

Auf jeden Fall tut es in dem Setter, wenn man es überhaupt tun muß.

Zuerst wird der Setter wahrscheinlich weniger häufig als die Getter genannt, so Sie tun, weniger Arbeit.

Zweitens, fangen Sie das Problem früher.

Drittens hält es den internen Zustand des Objekts konsistent. Wenn Sie schlechte Daten heraushalten, wissen Sie, dass Ihr Objekt "richtig" ist.

+0

+1: Interner Zustand des Objekts muss perfekt, konsistent, korrekt sein. –

2

Wenn es wie hässlich Typprüfung sieht, dass sein kann, weil es ist. Wenn "Betrag" unbedingt eine positive ganze Zahl sein muss und der Rest des Moduls schlecht ausfallen wird, wenn dies nicht der Fall ist, müssen Sie eine Typprüfung durchführen.

Der Python-Weg, dies zu tun, ist aber nur für die tatsächlichen Eigenschaften zu überprüfen, die Sie benötigen. Im positiven Integer-Beispiel bedeutet dies, dass nicht überprüft wird, dass der Wert ein Int-Objekt ist, sondern geprüft wird, dass es einen Wert hat und dass der Wert> 0 ist. Dadurch können andere Programmierer Ihre Methodenobjekte übergeben Zahlen, ohne ihren Typ streng einzuschränken.

Das gleiche gilt für das E-Mail-Beispiel - überprüfen Sie, ob es richtig formatiert ist (entspricht dem von Ihnen verwendeten E-Mail-Regex), bestehen Sie jedoch nicht darauf, dass es eine Instanz der Str-Klasse ist. Bestehen Sie nicht auf etwas in Ihrer Gültigkeitsprüfung außer Eigenschaften, die Sie tatsächlich verwenden werden.

Verwandte Themen