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
相关产品推荐
相关产品推荐

