我试图通过telnet连接到实验室仪器。 我想延长Telnet
从类telnetlib
模块中的标准库,包括具体功能我们的仪器:
import telnetlib
class Instrument(telnetlib.Telnet):
def __init__(self, host=None, port=0, timeout=5):
super(Instrument,self).__init__(host, port, timeout)
所有我想在此代码做的是继承__init__
从父类(方法telnetlib.Telnet
),并通过对标准的争论,所以我可以添加的东西__init__
后。 这个公式很适合我在其他场合; 这次它给我一个错误在super()
语句时,我尝试实例:
TypeError: must be type, not classobj
我看着为telnetlib的源代码,和Telnet似乎是一个老样式类(不继承object
) -我想知道是否这可能是我的问题的根源? 如果是这样,怎么能解决? 我已经看到了一些代码示例,其中的派生类的父类和继承了object
,虽然我不能完全肯定这是否是同样的问题,我的回应。
披露:我也曾尝试使用telnetlib.Telnet
代替super()
并from telnetlib import Telnet
与Telnet
代替super()
在这些情况下的问题仍然存在。
谢谢!
你需要调用构造函数是这样的:
telnetlib.Telnet.__init__(self, host, port, timeout)
您需要添加明确的self
,因为telnet.Telnet.__init__
是不是绑定的方法 ,而是一种不受约束的方法 ,即不用其他分配的一个实例。 所以调用它时,你需要明确地传递实例。
>>> 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)
你必须要继承object
,你必须将旧样式类,你正在努力继承(让后把它object
的方法都没有发现在前):
>>> 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>
从对象继承给你一个新的风格类作品有super
。