Po pierwsze, wiem, że funkcja __init__()
klasy w Pythonie nie może zwrócić wartości, więc niestety ta opcja jest niedostępna.Python __init__ return failure to create
Ze względu na strukturę mojego kodu, sensowne jest posiadanie twierdzeń danych (i monitów o podanie informacji przez użytkownika) w ramach funkcji __init__
klasy. Oznacza to jednak, że tworzenie obiektu może się nie powieść, i chciałbym móc z tego w pełni odzyskać sprawność.
Zastanawiam się, jaki jest najlepszy sposób na kontynuowanie tego. Rozważałem ustawienie globalnej wartości boolowskiej jako flagi "prawidłowej konstrukcji", ale wolałbym tego nie robić.
Jakieś inne pomysły (poza restrukturyzacją tak twierdzeń może się zdarzyć poza inicjalizacją, a wartości są przekazywane jako argumenty)? Po prostu szukam sposobu, aby powrócić 0 w przypadku powodzenia i zwrócić -1 w przypadku niepowodzenia podczas inicjalizacji. (Podobnie jak większość wywołań systemu C)
Podnieś wyjątek. –
Powracanie 0 w przypadku sukcesu i -1 w przypadku niepowodzenia jest bardzo un-Pythoniczne. Błędy zwracane są złe, ponieważ są łatwe do zignorowania i bardzo szczegółowe w obsłudze. Co więcej, użycie wartości 0 i -1 jako wartości logicznych powoduje tylko zamieszanie bez żadnych korzyści. Nie należy używać Pythona do pisania kodu C. – abarnert
Jak wskazuje @jsbueno w swojej odpowiedzi, instancje klasy są _initialized_ w '__init __()', nie zostały utworzone, dlatego też 'nie zwraca' wartości. Zamiast używać zmiennej globalnej do wykrywania niepowodzeń, wykonując to lub wyrzucając wyjątek, możesz dodać element danych do swojej klasy, aby wskazać jego stan, a następnie bezpośrednio sprawdzić jego wartość lub wywołać metodę, która zwraca jego wartość po tym, jak '__init __()' ma został wezwany do ustalenia, czy cokolwiek (i ewentualnie co), gdy źle. – martineau