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

Python如何不创建类实例就调用其他类的方法并解决self参数报错

Python类实例方法无实例调用错误解决方案

错误原因

你遇到的报错是因为check_data_format_input_data是FTM类的实例方法,Python的实例方法默认第一个参数self需要绑定该类的实例对象,直接通过类名调用时不会自动传入这个参数,所以会提示缺少位置参数self。
另外你写的Topic_embedding类的__init__方法还存在顺序问题:你在给self.input_data赋值之前就调用了self.input_data,即使解决了方法调用问题,也会触发AttributeError。

可行解决方案(无需创建FTM实例)

方案1:将校验方法改为静态方法(最推荐)

如果check_data_format_input_data方法内部没有用到self指向的任何实例属性,只是做纯输入格式校验,直接给该方法加@staticmethod装饰器即可,静态方法不需要传入self/cls参数,可以直接通过类名调用。
修改后的FTM类代码:

class FTM():
    def __init__(self, input_data):
        self.check_data_format_input_data(input_data)
        self.input_data= input_data
        #SOME CODE

    @staticmethod
    def check_data_format_input_data(input_data):
        #SOME CODE     
        return

修改后的Topic_embedding类调用代码(调整赋值顺序):

class Topic_embedding:
    def __init__(self, input_data):
        # 先赋值再调用,或者直接传input_data参数
        self.input_data= input_data
        FTM.check_data_format_input_data(input_data = self.input_data)

方案2:不改动原有FTM类代码的临时方案

如果不能修改FTM类的原有定义,且确认check_data_format_input_data内部完全没有用到self的任何属性,可以手动给第一个参数传一个任意占位值(比如None),但该方法不符合规范,仅适合临时调试用:

class Topic_embedding:
    def __init__(self, input_data):
        self.input_data= input_data
        # 手动传占位值给self参数
        FTM.check_data_format_input_data(None, input_data = self.input_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:03