Python - 从旧式类继承

标签 python inheritance telnet

我正在尝试通过 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 继承的)——我想知道这是否可能是我的问题?如果是这样,如何克服?我看过一些代码示例,其中派生类继承自父类(super class)和 object,但我不完全确定这是否是对与我相同的问题的响应。

完全披露:我也尝试使用 telnetlib.Telnet 代替 super(),以及 from telnetlib import TelnetTelnet 代替 super()。在这些情况下问题仍然存在。

谢谢!

最佳答案

您需要调用constructor像这样:

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

您需要添加显式 self 因为 telnet.Telnet.__init__ 不是 绑定(bind)方法 而是 未绑定(bind)方法,即没有分配实例。因此,调用它时,您需要显式传递实例。

>>> 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)

关于Python - 从旧式类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527921/

相关文章:

C++ 继承,发送指向基类的指针

Powershell:监听 Telnet 响应文本

c - 如何使用自定义端口(非默认)仅使用 telnet 或 FTP 连接服务器和客户端(在 C 语言的套接字编程中)?

python - 如何使用带有 Python 绑定(bind)的 Selenium 禁用日志记录

python - 限制一对多关系中 Many 的数量

python - 使用 python 从电子表格中提取多个表

python - 在 csv 文件中标记重复项

c# - 是否可以为 C# 接口(interface)定义 "shared"方法?

c# - 在 C# 中向现有代码添加自定义功能的最佳方式是什么?

python - 我可以清除 Python 2.7 上 Telnetlib 中的输出缓冲区吗