Python导入外部类实例化报takes no arguments错误排查
问题排查结论
核心错误是类构造方法名拼写错误:
Python 类实例化时自动触发的构造方法固定为双下划线包裹的__init__(是initialize的缩写,负责实例初始化逻辑),你的代码里把方法名写成了__int__——这是完全不同的另一个内置魔术方法,作用是定义实例被int()函数强转时的返回值,和实例初始化没有任何关系。
你遇到的所有异常都可以对应解释:
- 由于你没有手动定义正确的
__init__方法,Python会为类自动生成一个仅接收self参数的无参默认构造方法,因此你传入参数实例化类时,会直接抛出TypeError: UploadFastq() takes no arguments错误。 - 你无参实例化后手动调用
__int__方法能部分运行,本质是你自己定义的__int__就是个普通实例方法,手动调用时给实例绑定了对应属性,自然能跑通部分逻辑,但这完全不符合构造方法的正常调用流程。 - 你尝试手动调用
__init__传参报错,是因为此时调用的是Python自动生成的默认无参__init__,该方法只接收实例自身作为参数,传入其他参数必然触发参数数量不匹配的错误。
修复方案
- 把类中写错的方法名
__int__修正为__init__,修正后的核心代码如下:
class UploadFastq: def __init__(self, some_list, some_str, some_obj, **kwargs): self.some_list = some_list self.some_obj = some_obj self.some_str = some_str def process(self): self.some_methods_calling_processes() ...
- 修正调用逻辑的笔误:你写的
uploads.process只是引用了方法对象,并没有实际执行,需要加括号写成uploads.process()才会真正运行处理流程。
修复后正常传参实例化即可运行,不需要手动调用任何双下划线开头的内置方法。
内容的提问来源于stack exchange,提问作者Berk Gonenc
相关产品推荐
相关产品推荐

