Python的 - 从老式类继承(Python - inheriting from old-styl

2019-06-26 08:32发布

我试图通过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 TelnetTelnet代替super() 在这些情况下的问题仍然存在。

谢谢!

Answer 1:

你需要调用构造函数是这样的:

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)


Answer 2:

你必须要继承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



文章来源: Python - inheriting from old-style classes