2010-02-03 9 views
6

Gdzie należy pisać kody sprawdzające poprawność właściwości klasy? (Na przykład: "kwota" powinna być dodatnią liczbą całkowitą, "e-mail" powinien być ciągiem z poprawnym formatowaniem wiadomości e-mail) Przy metodach ustawiających, Gdzieś używam tego (używając try/catch) lub innych.Sprawdzanie poprawności właściwości w klasach Python

Jeśli sprawdzę poprawność metod Settera, może wyglądać brzydko (jak sprawdzanie typu). Ale jeśli sprawdzę to podczas używania, zduplikowany kod może pojawić się, gdy jest używany wielokrotnie.

(Przepraszam za mój słaby angielski).

Odpowiedz

4

pewno to zrobić w setter, jeśli trzeba to zrobić w ogóle.

Po pierwsze, seter jest prawdopodobnie nazywany rzadziej niż pobierający, więc wykonujesz mniej pracy.

Po drugie, problem zostanie zauważony wcześniej.

Po trzecie, utrzymuje wewnętrzny stan obiektu spójny. Utrzymywanie złych danych oznacza, że ​​wiesz, że twój obiekt jest "właściwy".

+0

+1: Wewnętrzny stan obiektu musi być doskonały, spójny, poprawny. –

2

Jeśli wygląda na paskudne sprawdzanie typu, może tak być, ponieważ jest. Jeśli "ilość" absolutnie musi być dodatnią liczbą całkowitą, a reszta modułu ulegnie uszkodzeniu, jeśli nie jest, to musisz wykonać pewne sprawdzenie typu.

Sposób w jaki to robi, polega jedynie na sprawdzeniu rzeczywistych właściwości, które są wymagane.

W dodatnim przykładzie całkowitym oznacza to nie sprawdzanie, czy wartość jest obiektem typu Int, ale sprawdzenie zamiast tego, czy ma wartość, i że wartość wynosi> 0. Pozwala to innym programistom przekazać obiekty metod, które zachowują się jak liczby, bez ścisłego ograniczania ich typu.

To samo dotyczy przykładu wiadomości e-mail - sprawdź, czy jest poprawnie sformatowany (pasuje do dowolnego wyrażenia e-mail, z którego korzystasz), ale nie nalegaj, że jest instancją klasy Str. Nie nalegaj na nic w sprawdzaniu ważności, z wyjątkiem właściwości, które zamierzasz użyć.

Powiązane problemy