pyplot python inheritance telnet

pyplot - Python: hereda de las clases antiguas



title plt python (2)

Debes llamar al constructor así:

telnetlib.Telnet.__init__(self, host, port, timeout)

Necesita agregar el self explícito desde telnet.Telnet.__init__ no es un método vinculado sino un método independiente , es decir, sin una instancia asignada. Entonces, cuando lo llame, debe pasar la instancia explícitamente.

>>> Test.__init__ <unbound method Test.__init__> >>> Test().__init__ <bound method Test.__init__ of <__main__.Test instance at 0x7fb54c984e18>> >>> Test.__init__() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method __init__() must be called with Test instance as first argument (got nothing instead)

Estoy tratando de conectarme a través de telnet a un instrumento de laboratorio. Me gustaría extender la clase Telnet desde el módulo telnetlib en la biblioteca estándar, para incluir funciones específicas de nuestro instrumento:

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 trato de hacer en este código es heredar el método __init__ de la clase padre ( telnetlib.Telnet ) y transmitir los argumentos estándar, así puedo agregar cosas a __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 instanciar:

TypeError: must be type, not classobj

Miré el código fuente para telnetlib, y Telnet parece ser una clase de estilo antiguo (no hereda del 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 tanto de la superclase como del object , aunque no estoy del todo seguro de si esto es una respuesta al mismo problema que yo.

telnetlib.Telnet 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!


Tienes que heredar de un object , y debes ponerlo después de la clase de estilo antiguo de la que intentas heredar (para que los métodos del object no se encuentren primero):

>>> class Instrument(telnetlib.Telnet,object): ... def __init__(self, host=None, port=0, timeout=5): ... super(Instrument,self).__init__(host, port, timeout) ... >>> Instrument() <__main__.Instrument object at 0x0000000001FECA90>

Heredar de un objeto te da una clase de estilo nuevo que funciona con super .