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

Python子类继承父类时__init__方法传参报错:TypeError: 收到意外关键字参数'max_size'

解决Python子类继承时的参数传递错误及优化建议

首先咱们直击问题核心:你遇到的TypeError: FileValidatorPlus.__init__() got an unexpected keyword argument 'max_size',本质是你在实例化子类时传入了max_size参数,但子类的__init__方法根本没定义这个参数,Python不知道该把这个参数放哪,所以直接报错了。

除此之外,你的代码还有两个容易忽略的小问题:

  • 调用父类构造器super().__init__()时没有传递max_size,导致父类的self.max_size永远是默认的None,完全没用到你传入的参数
  • error_messages的合并方式可以更优雅,避免在实例化时重复处理

修正后的完整代码

class File:
    def __init__(self, file_size=100):
        self.file_size = file_size

class FileValidator(object):
    error_messages = {'max_size': 'some error msg'}
    def __init__(self, max_size=None):
        self.max_size = max_size

    def __call__(self, file):
        print(self.max_size > file.file_size)

class FileValidatorPlus(FileValidator):
    # 直接合并父类与子类的错误消息字典,一步到位
    error_messages = {**FileValidator.error_messages, 'min_size': 'some other error msg'}
    
    # 显式接收父类需要的max_size参数,加上子类独有的min_size
    def __init__(self, max_size=None, min_size=None):
        # 把max_size传给父类构造器,确保父类属性正确初始化
        super(FileValidatorPlus, self).__init__(max_size=max_size)
        self.min_size = min_size

# 现在实例化不会再报错
validator = FileValidatorPlus(max_size=10, min_size=20)
print(validator.error_messages)
print(validator.max_size)
print(validator.min_size)

关键修改点说明

  1. 让子类接收父类参数:
    我们在FileValidatorPlus的__init__里显式定义了max_size参数,这样实例化时传入的max_size能被正确接收,再通过super()传给父类构造器,保证父类的属性能正常初始化。

    如果想让子类更灵活(比如父类以后新增参数不用改子类),也可以用**kwargs兼容所有父类参数:

    def __init__(self, min_size=None, **kwargs):
        super().__init__(**kwargs)
        self.min_size = min_size
    
  2. 优雅合并错误消息:
    原来在__init__里用update合并字典的方式,改成了在类定义时直接用字典解包{**父类字典, **子类新内容},这样类属性一开始就是合并后的结果,不用在每次实例化时重复处理,更高效。

  3. 正确传递参数给父类:
    之前的super()调用没有传max_size,导致父类的self.max_size一直是None,现在把接收的max_size传进去,父类就能正确初始化这个属性了。

运行修正后的代码,会得到预期输出:

{'max_size': 'some error msg', 'min_size': 'some other error msg'}
10
20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:47:35