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

Emp*_*nes 16 python

A:

super( BasicElement, self ).__init__()
Run Code Online (Sandbox Code Playgroud)

B:

super( BasicElement, self ).__init__( self )
Run Code Online (Sandbox Code Playgroud)

A和B有什么区别?我遇到的大多数示例使用A,但我遇到的问题是A没有调用父__init__函数,但是B是.为什么会这样?应该使用哪种情况?

jdi*_*jdi 26

你不应该做第二种形式,除非某种方式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
Run Code Online (Sandbox Code Playgroud)

或者使用需要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    
Run Code Online (Sandbox Code Playgroud)

  • 关于这种结构的重要性在于超类A必须显式地从对象派生.只是声明'class A:'会引发异常'TypeError:必须是type,而不是classobj',当调用super init调用时. (6认同)