首页 > 解决方案 > __init__ 可以在调用 super 后自动执行代码吗?

问题描述

我有这样的事情:

class SuperClass(object):
    def __init__(self):
        # initialization stuff

    def always_do_this_last(self):
        # cleanup stuff


class SubClass(SuperClass):
    def __init__(self):
        super().__init__()
        # intermediate stuff
        self.always_do_this_last()

是否可以自动调用最后一行?每个SuperClass需求子类都执行清理。

标签: python

解决方案


而不是覆盖__init__,定义一个SuperClass.__init__将调用的方法。

class SuperClass(object):
    def __init__(self):
        # do some stuff
        self.child_init()
        self.cleanup()

    def cleanup():
        ...

    def child_init(self):
        pass


class SubClass(SuperClass):
    def child_init(self):
        ...

您可以定义SuperClass.__init_subclass__以确保child_init被覆盖,或使用abc模块制作SuperClass.child_init抽象方法


推荐阅读