Модуль Python Cmd, проблема создания подклассов

Я пытаюсь понять, что не работает в этом коде:

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

Если я изменю суперкласс "My_class" на объект, он будет работать нормально. Куда я иду не так?

4 ответа

Решение

super() работает только для классов нового стиля

cmd.Cmd не новый класс стилей в Python 2.5, 2.6, 2.7.

Обратите внимание, что ваш код не вызывает исключение в Python 3.0.

Так что если super() не работает, используйте:

import cmd

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

Вы все еще можете использовать super() если твой MyClass продолжается object, Это работает, хотя 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()
Другие вопросы по тегам