LINUX.ORG.RU

Непонятки с вызовом метода __init__, определённого для предка

 ,


1

2
<ipython-input-28-9a235b20b67c> in __init__(self, path, bound)
     29     def __init__ (self, path, bound):
     30         self.bound = bound
---> 31         super(Rule, self).__init__( path)
     32 

TypeError: must be type, not classobj

Код такой:


class Rule:

    def __init__(self, path):
        self.path = path

class sideRule(Rule):

    def __init__ (self, path, bound):
        self.bound = bound
        super(Rule, self).__init__( path)

Python 2.7.6, IPython 2.0.0

★★★★★

Последнее исправление: ados (всего исправлений: 1)

Пока живу с:

class sideRule(Rule):

    def __init__ (self, path, bound):
        self.bound = bound
        Rule.__init__(self, path)
ados ★★★★★
() автор топика
Ответ на: комментарий от sT331h0rs3

В python я плохо разбираюсь и хочу понять - зачем super

ados ★★★★★
() автор топика
Ответ на: комментарий от sT331h0rs3

Я понял - super позволяет абстрагироваться от конкретного предка, а в том решении Rule нужно указывать. Где-то super будет удобнее.

ados ★★★★★
() автор топика
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от ados

странно, а у меня чё-то не работает )) //а не, всё работает

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

super(Rule, self).__init__( path)

В super передавай текущий класс. Это вобще адово бесит, что нет короткой записи типа super().__init__(), в 98% случаев ты все равно туда передаешь текущий класс и self.

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 1)
Ответ на: комментарий от loz

Это вобще адово бесит, что нет короткой записи типа super().__init__(),

разве нету? Или это только в 3 питоне?

Bad_ptr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.