Python Cmd模块,子类化问题
我正在尝试找出此代码中不起作用的内容:Python Cmd模块,子类化问题,python,Python,我正在尝试找出此代码中不起作用的内容: #!/usr/bin/python import cmd class My_class (cmd.Cmd): """docstring for Twitter_handler""" def __init__(self): super(My_class, self).__init__() if __name__ == '__main__': my_handler = My_class() 这是我得到的错误 Tr
#!/usr/bin/python
import cmd
class My_class (cmd.Cmd):
"""docstring for Twitter_handler"""
def __init__(self):
super(My_class, self).__init__()
if __name__ == '__main__':
my_handler = My_class()
这是我得到的错误
Traceback (most recent call last):
File "main.py", line 12, in <module>
my_handler = My_class()
File "main.py", line 9, in __init__
super(My_class, self).__init__()
TypeError: super() argument 1 must be type, not classobj
回溯(最近一次呼叫最后一次):
文件“main.py”,第12行,在
my_handler=my_class()
文件“main.py”,第9行,在_init中__
超级(我的类,自我)。\uuuuu init\uuuuu()
TypeError:super()参数1必须是类型,而不是classobj
如果我将“My_class”的超类更改为对象,它就可以正常工作。哪里出错了?只适用于cmd.cmd在Python 2.5、2.6、2.7中不是一个新样式类 请注意,您的代码在Python 3.0中不会引发异常。因此,如果不起作用,请使用:
import cmd
class My_class(cmd.Cmd):
def __init__(self):
cmd.Cmd.__init__(self)
如果您的
MyClass
扩展了对象,您仍然可以使用super()
。即使cmd.cmd
模块不是一个新样式的类,它仍然可以工作。像这样:
#!/usr/bin/python
import cmd
class My_class (cmd.Cmd, object):
"""docstring for Twitter_handler"""
def __init__(self):
super(My_class, self).__init__()
if __name__ == '__main__':
my_handler = My_class()
这是因为cmd模块是用Python 3重写的吗?不是。这是因为在Python3.0中,所有的类都是“新样式的类”。(事实上,2.5和3.0的cmd.py之间的差异将显示这些版本之间的更改非常少。)我想知道,您是否可以将cmd.py中的“class cmd:”更改为“class cmd(object)”,并且预期不会出现问题?它可能会工作。但是您将拥有地球上唯一一个安装了新型Cmd类的Python2.x。。。不要让您发布的任何代码依赖于此:)这也适用于我。有人能对Py2或Py3中的任何奇怪的副作用进行权衡吗?