Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cmd模块,子类化问题_Python - Fatal编程技术网

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中的任何奇怪的副作用进行权衡吗?