Próbuję połączyć się za pomocą telnetu z instrumentem laboratoryjnym. Chciałbym rozszerzyć klasę Telnet
z modułu telnetlib
w bibliotece standardowej, w celu włączenia funkcji specyficznych dla naszego instrumentu:Python - dziedzicząc z klas w starym stylu
import telnetlib
class Instrument(telnetlib.Telnet):
def __init__(self, host=None, port=0, timeout=5):
super(Instrument,self).__init__(host, port, timeout)
Wszystko staram się zrobić w tym kodzie jest dziedziczą metodę z rodzicem __init__
klasa (telnetlib.Telnet
) i przekazuj standardowe argumenty, więc mogę później dodać rzeczy do __init__
. Ta formuła przydała mi się przy innych okazjach; Tym razem to daje mi błąd w rachunku super()
gdy próbuję instancję:
TypeError: must be type, not classobj
Spojrzałem na kodzie źródłowym telnetlib i Telnet wydaje się klasę w starym stylu (nie dziedziczą object
) - Zastanawiam się, czy to może być źródłem mojego problemu? Jeśli tak, jak można go pokonać? Widziałem kilka przykładów kodu, w których klasa pochodna dziedziczy zarówno z nadklasy i object
, choć nie jestem całkowicie pewien, czy jest to odpowiedź na ten sam problem, co ja.
Pełne ujawnienie: Próbowałem również używając telnetlib.Telnet
zamiast super()
i from telnetlib import Telnet
z Telnet
zamiast super()
. Problem występuje w tych przypadkach.
Dzięki!
Próbowałem tego - daje mi błąd: 'TypeError: niezwiązana metoda __init __() musi być wywołana z instancją Telnet jako pierwszym argumentem (zamiast tego otrzymała instancję str)' –
Pokaż dokładny kod i błąd, który otrzymujesz kod, który właśnie wysłałem. Ponieważ tak właśnie jest, jeśli chcesz wywołać konstruktora macierzystego klasy w starym stylu. – ThiefMaster
Ach, zauważyłem różnicę między twoim kodem a moim - miałeś "self" jako pierwszy argument '__init__'. Działa teraz - dzięki za szybką odpowiedź! Czy byłbyś w stanie wyjaśnić mi, dlaczego musisz podać "self" jako pierwszy argument konstruktora? Jestem nowy w Pythonie. –