为什么__init__显然是可选的?

tem*_*ame 4 python python-3.x

在试验时,我写道:

class Bag:   
    pass

g = Bag()
print(g)
Run Code Online (Sandbox Code Playgroud)

哪个给了我:

<__main__.Bag object at 0x00000000036F0748>
Run Code Online (Sandbox Code Playgroud)

这令我感到惊讶.当我尝试初始化它时,我预计会出现错误,因为我没有定义__init___.

为什么不是这种情况?

Kim*_*ais 10

您只需要覆盖要更改的方法.

换一种说法:

如果不覆盖__init__,__init__将调用超类的方法.

例如

class Bag:
    pass
Run Code Online (Sandbox Code Playgroud)

如果相当于:

class Bag:
    def __init__(self):
        super(Bag, self).__init__()
Run Code Online (Sandbox Code Playgroud)

此外,__init__确实是可选的.这是一个初始化的一个实例.

当你实例化一个类(通过调用它)的构造函数(类方法__new__)被调用.构造函数返回一个__init__被调用的实例.

所以在实践中甚至:

class Bag:
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

会工作得很好.