2009-04-20 20 views
6

que estoy tratando de averiguar lo que no funciona en este código:Cmd Python, emisión de subclases

#!/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() 

Aquí está el error que consigo

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 

Si cambio de la superclase de "My_class "para un objeto funciona bien. ¿Dónde estoy equivocado?

Respuesta

7

cmd.Cmd no es una nueva clase de estilo en Python 2.5, 2.6, 2.7.

Tenga en cuenta que su código no no genera una excepción en Python 3.0.

+0

¿Esto se debe a que el módulo cmd está reescrito en Python 3? – Teifion

+0

No. Es porque en Python 3.0 todas las clases son "nuevas clases de estilo". – Stephan202

+0

(De hecho, un diff entre 2.5 y 3.0 cmd.py le mostrará que se hicieron muy pocos cambios entre esas versiones.) – Stephan202

2

Así que si no funciona super() uso:

import cmd 

class My_class(cmd.Cmd): 
    def __init__(self): 
     cmd.Cmd.__init__(self) 
1

Puede seguir utilizando super() si su MyClass extiende object. Esto funciona aunque el módulo cmd.Cmd es no una clase de nuevo estilo. De esta manera:

#!/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() 
+0

Esto también funciona para mí. ¿Alguien puede opinar sobre cualquier efecto secundario extraño en Py2 o Py3? – Technoloft