我正在尝试通过telnet连接实验室仪器。我想扩展标准库中的telnetlib
模块中的Telnet
类,以包括特定于我们仪器的功能:
import telnetlib
class Instrument(telnetlib.Telnet):
def __init__(self, host=None, port=0, timeout=5):
super(Instrument,self).__init__(host, port, timeout)
我在这段代码中所做的就是从父类(telnetlib.Telnet
)继承__init__
方法并传递标准参数,以便稍后添加内容到__init__
中。这个公式在其他场合已经对我起过作用;但这一次,在我尝试实例化时,在super()
语句处出现了错误:
TypeError: must be type, not classobj
我查看了 telnetlib 的源代码,Telnet 看起来是一种旧式类(它没有继承自 object
) - 我想知道这是否可能是我的问题的来源?如果是,如何解决?我看过一些代码示例,其中派生类同时继承自超类和 object
,但我不确定这是否是响应与我的问题相同的方式。
完全揭露:我还尝试过使用telnetlib.Telnet
代替super()
,以及使用Telnet
代替super()
的from telnetlib import Telnet
。在这些情况下,问题仍然存在。
谢谢!
TypeError: 未绑定的方法__init__()必须使用Telnet实例作为第一个参数进行调用(而不是str实例)
。 - Benjamin Hodgson__init__
的第一个参数中使用了self
。现在它能够工作了 - 谢谢你的快速回复!你能否向我解释一下为什么需要将self
作为构造函数的第一个参数?我是 Python 新手。 - Benjamin Hodgsonself.foo(a, b)
,Python将其转换为对foo(self, a, b)
的调用。但在这种情况下,您不是在对象上调用__init__
,而是在类上调用它,这意味着您必须显式添加self
。(这在一些细节上略有不准确,但足以用于学习目的。) - abarnert