Модуль Python Cmd, проблема создания подклассов - PullRequest
6 голосов
/ 21 апреля 2009

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

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

9 голосов
/ 21 апреля 2009

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

7 голосов
/ 21 апреля 2009

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

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

2 голосов
/ 02 мая 2016

Вы все еще можете использовать 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()
2 голосов
/ 01 декабря 2015

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

import cmd

class My_class(cmd.Cmd):
    def __init__(self):
        cmd.Cmd.__init__(self)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...