You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中重写第三方库父类的__init__方法?

问题:重写第三方库类的__init__方法,改用自定义初始化逻辑

用户提供的简化代码结构如下:

########### 第三方库代码 ##############
class LibraryClassA:
    def __int__(self):  # 注:此处为笔误,正确应为__init__
        pass


class LibraryClassB(LibraryClassA):
    def __init__(self, cfg):
        super().__init__()
        self.cfg = cfg

    def func(self):
        print("Do something")


###########################################

class UserDefinedClass(LibraryClassB):
    def new_init(self):
        print("The new init function")

    def func(self):
        print("Do something else")


def main():
    obj = UserDefinedClass(cfg="CONF")  # 注:原代码用class做变量名,属于Python关键字,改为obj避免语法错误

需求:替换第三方库类LibraryClassB原有的__init__初始化逻辑,改用UserDefinedClass中的new_init方法完成初始化。


可行实现方案

方案1:直接重写__init__,完全替换父类逻辑

在自定义类里重写__init__,直接调用自己的new_init,彻底跳过父类LibraryClassB的初始化流程:

class UserDefinedClass(LibraryClassB):
    def new_init(self):
        print("The new init function")

    def func(self):
        print("Do something else")

    # 重写初始化方法
    def __init__(self):
        self.new_init()

如果需要兼容原父类__init__的参数传入(但不使用),可以写成:

def __init__(self, *args, **kwargs):
    self.new_init()

方案2:保留父类必要初始化逻辑

如果祖父类LibraryClassA的初始化逻辑必须保留,但要跳过LibraryClassB的__init__逻辑,可以直接调用祖父类的初始化方法:

class UserDefinedClass(LibraryClassB):
    def new_init(self):
        print("The new init function")

    def func(self):
        print("Do something else")

    def __init__(self):
        # 直接调用LibraryClassA的__init__,跳过LibraryClassB的初始化步骤
        super(LibraryClassB, self).__init__()
        self.new_init()

内容的提问来源于stack exchange,提问作者Gabrysse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:05:23