python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python Missing 1 required positional argument

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 :

代码就能够成功运行了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文