Python: super и __init __() vs __init __ (self)

A:

super( BasicElement, self ).__init__()

В:

super( BasicElement, self ).__init__( self )

В чем разница между A и B? Большинство примеров, с которыми я сталкиваюсь, используют A, но я столкнулся с проблемой, когда A не вызывает родительскую функцию __init__, но B есть. Почему это может быть? Что следует использовать и в каких случаях?

Ответы

Ответ 1

Вам не нужно делать эту вторую форму, если какой-то класс BasicElement __init__ не принимает аргумент.

class A(object):
    def __init__(self):
        print "Inside class A init"

class B(A):
    def __init__(self):
        super(B, self).__init__()
        print "Inside class B init"

>>> b = B()
Inside class A init
Inside class B init

Или с классами, которым нужны аргументы init:

class A(object):
    def __init__(self, arg):
        print "Inside class A init. arg =", arg

class B(A):
    def __init__(self):
        super(B, self).__init__("foo")
        print "Inside class B init"

>>> b = B()
Inside class A init. arg = foo
Inside class B init