Estoy intentando conectarme a través de telnet a un instrumento de laboratorio. Me gustaría extender la clase del módulo Telnet
telnetlib
en la biblioteca estándar, para incluir funciones específicas a nuestro instrumento:Python: herencia de las clases antiguas
import telnetlib
class Instrument(telnetlib.Telnet):
def __init__(self, host=None, port=0, timeout=5):
super(Instrument,self).__init__(host, port, timeout)
Todo lo que estoy tratando de hacer en este código se heredan el método __init__
de los padres clase (telnetlib.Telnet
) y pasar los argumentos estándar, por lo que puedo agregar cosas al __init__
más tarde. Esta fórmula me ha funcionado en otras ocasiones; esta vez me da un error en la declaración super()
cuando intento crear una instancia:
TypeError: must be type, not classobj
Miré el código fuente de telnetlib y Telnet parece ser una clase de estilo antiguo (que no hereda de object
) - Me pregunto si esta podría ser la fuente de mi problema. Si es así, ¿cómo se puede superar? He visto algunos ejemplos de código donde la clase derivada hereda ambos de la superclase y object
, aunque no estoy del todo seguro de si esto es una respuesta al mismo problema que yo.
La revelación completa: También he intentado usar telnetlib.Telnet
en lugar de super()
y from telnetlib import Telnet
con Telnet
en lugar de super()
. El problema persiste en estos casos.
Gracias!
Lo he intentado - me da el error: 'TypeError: método unbound __init __() debe llamarse con la instancia Telnet como primer argumento (instancia get str en cambio)' –
Muestra el código exacto y el error que obtienes el código que acabo de publicar Porque así es como se hace realmente si quieres llamar al constructor padre de una clase antigua. – ThiefMaster
Ah, he visto la diferencia entre tu código y el mío: tuviste 'self' como el primer argumento de' __init__'. Funciona ahora, ¡gracias por responder tan rápido! ¿Podrías explicarme por qué necesitas dar 'self' como primer argumento al constructor? Soy nuevo en Python. –