python解决Missing 1 required positional argument报错问题
作者:暗潮汹涌
这篇文章主要介绍了python解决Missing 1 required positional argument报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
1. 报错描述
2. 报错原因
从报错代码能够看出,我这里涉及了两个类,我用A类和B类来进行描述。
A类:一个方法类,其中报错的 get_element() 就是这个类下的一个方法。在该类我没有实例化
B类:在 get_element() 中调用了A的 get_element() 方法。只在开头 from A import A.
因为A类没有实例化,B类我也没有进行实例化,只是直接引入了这个类。所以我最后的调用其实是 A类直接调用类方法 get_element() 。所以就报错了。
3. 解决方案
有两种解决方案:
3.1 实例化
在A类中我们实例化,例如 :a = A()
.
然后在B类引入A类的实例化对象而非A这个类。例:from A import a
如果要调用A类的方法,调用方式如下:a.get_element(传参)
3.2 加上修饰符 @classmethod
该修饰符的作用:
1、@classmethod声明一个类方法,而对于平常我们见到的则叫做实例方法。
2、类方法的第一个参数cls(class的缩写,指这个类本身),而实例方法的第一个参数是self,表示该类的一个实例
3、可以通过类来调用,就像C.f(),相当于java中的静态方法’’’
例:
class A(object): # 属性默认为类属性(可以给直接被类本身调用) num = "类属性" # 实例化方法(必须实例化类之后才能被调用) def func1(self): # self : 表示实例化类后的地址id print("func1") print(self) # 类方法(不需要实例化类就可以被类本身调用) @classmethod def func2(cls): # cls : 表示没用被实例化的类本身 print("func2") print(cls) print(cls.num) cls().func1() # 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准) def func3(): print("func3") print(A.num) # 属性是可以直接用类本身调用的 # A.func1() 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的 A.func2() A.func3()
那么对于我这个例子,直接在A类要被调用的方法 get_element() 前加上修饰符 @classmethod :
代码就能够成功运行了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。