2016-12-23 15 views
5

Zaczynam się uczyć Pythona i jako główny programista Java, największym problemem, jaki mam, jest zrozumienie, kiedy i kiedy nie należy używać sprawdzania typu. Większość ludzi wydaje się mówić, że kod Pythona nie powinien wymagać sprawdzania typu, ale jest wiele przypadków, kiedy uważam, że jest to konieczne. Na przykład, powiedzmy, że muszę użyć parametru metody, aby wykonać operację arytmetyczną, dlaczego nie powinienem upewnić się, że argument jest liczbowym typem danych?Kiedy należy używać sprawdzania typów (jeśli w ogóle) w Pythonie?

Ten problem nie ogranicza się tylko do funkcji. Ten sam proces myślenia występuje mi w przypadku zmiennych klasowych. Dlaczego i kiedy powinienem/powinienem używać właściwości (używając @property), aby sprawdzić typ zamiast regularnie zaimplementowanych zmiennych klas?

Jest to nowy sposób podejścia do rozwoju, dlatego doceniam pomoc w zrozumieniu.

+12

Dlaczego * należy * sprawdzić, czy otrzymana metoda jest typu numerycznego? Jeśli nie, wszystko, co możesz zrobić, to podnieść jakiś wyjątek; ale wyjątek * już * zostanie podniesiony, jeśli spróbujesz wykonać operację arytmetyczną na typie, który jej nie obsługuje. Więc jaki jest sens sprawdzania jawnie? –

+3

Powiązane - http://stackoverflow.com/questions/1950386/is-it-pythonic-to-check-function-argument-types –

+0

Możliwy duplikat [Czy powinienem wymusić sprawdzanie typu Pythona?] (Http: // stackoverflow. com/questions/17493159/should-i-force-python-type-checking) – gerosalesc

Odpowiedz

5

To nie pythonowy sprawdzić informacje typu, należy kaczka wpisując zamiast: jeśli wygląda jak kaczka, spacery jak kaczka i quacks jak kaczka to jest kaczka.

def quack(duck): 
    duck.quack() 

to będzie działać tylko wtedy, gdy duck ma wpłacone quack attrubute, to podniesie wyjątek, który może być inaczej złowionych przez rozmówcę.

+0

Tylko dla rekordu, niektóre tła dla terminu "kaczka-pisania": http://stackoverflow.com/questions/4205130/what-is-duck-typing – ppasler

+0

Problem polega zwykle na tym, że pytasz o to, aby znachorować tylko wtedy, gdy froby użytkownika widget w ten szczególny sposób, a więc odkrywasz, że ktoś wyprzedził psa zamiast kaczki tylko podczas najważniejszego demo, jakie kiedykolwiek istniało. –

0

Najprostsza odpowiedź prawdopodobnie rozpoczyna się bez sprawdzania typu i sprawdzania, co się stanie. Prawdopodobnie dowiesz się - tak jak to zrobiłem 17 lat temu i ku mojemu zdziwieniu - że potrzebujesz go w mniejszym stopniu niż przypuszczasz. Dla przypomnienia, że ​​nie można było napisać nic oprócz szybkich skryptów i programów zabawkarskich bez ścisłego sprawdzania i tracenia czasu na walkę z językiem, dopóki nie zacząłem czytać poważnego kodu aplikacji Pythona i kodu stdlib i dowiedziałem się, że pracował bez.

Powiązane problemy