Zdefiniowałem klasę w pliku o nazwie Object.py
. Kiedy próbuję dziedziczyć z tej klasy w innym pliku, wywołanie konstruktora zgłasza wyjątek:
TypeError: module.__init__() takes at most 2 arguments (3 given)
To jest mój kod:
import Object
class Visitor(Object):
pass
instance = Visitor() # this line throws the exception
Co ja robię źle?
Odpowiedzi:
Twój błąd występuje, ponieważ
Object
jest to moduł, a nie klasa. Więc twoje dziedzictwo jest skomplikowane.Zmień zestawienie importu na:
i definicję klasy, aby:
lub
zmień definicję klasy na:
źródło
ClassName
całkowicie pominiemy ? Lubiszclass Visitor()
?Nawet po odpowiedzi @Mickey Perlstein i jego 3-godzinnej pracy detektywistycznej zajęło mi jeszcze kilka minut, zanim zastosowałem to do własnego bałaganu. Na wypadek, gdyby ktoś był podobny do mnie i potrzebuje trochę więcej pomocy, oto co działo się w mojej sytuacji.
Początkowa klasa GeoJsonResponse:
Wygląda w porządku. Żadnych problemów, dopóki nie spróbujesz debugować, co dzieje się, gdy pojawia się kilka pozornie niejasnych komunikatów o błędach, takich jak ten:
Błędy robiły wszystko, co w ich mocy, aby wskazać mi właściwy kierunek, a odpowiedź @Mickey Perlstein była martwa, zajęło mi tylko minutę, aby zebrać to wszystko w moim własnym kontekście:
Importowałem moduł :
kiedy powinienem był importować klasę :
Mam nadzieję, że to komuś pomoże. (W mojej obronie jest jeszcze dość wcześnie.)
źródło
Możesz także wykonać następujące czynności w Pythonie 3.6.1
i definicję klasy, aby:
źródło
lub
Jeśli Object jest
.py
plikiem.źródło
W moim przypadku, w którym miałem problem, odnosiłem się do modułu, gdy próbowałem rozszerzyć klasę.
Jeśli spojrzysz na informacje o dokumentacji, zobaczysz „logowanie” wyświetlane jako moduł.
W tym konkretnym przypadku musiałem po prostu odziedziczyć moduł logowania, aby utworzyć dodatkową klasę do logowania.
źródło