我们可以调用没有自我的类方法吗?

时间:2020-06-11 12:10:44

标签: python python-3.x class oop self

class abc:
    def yo(var):
        a=var
        print(a)
x=abc().yo(5)

输出: 追溯(最近一次通话):

中的文件“ main.py”第5行 x = abc()。yo(5)
TypeError:yo()接受1个位置参数,但给出了2个

    class abc:
        def yo(self,var):
            self.a=var
            print(self.a)
    x=abc().yo(5)

输出:5

在我使用self关键字之前,它一直有效,我是说我们可以在不使用self参数的情况下调用函数的原因,为什么它说yo()接受1个参数,而排除self却给出2个参数?

2 个答案:

答案 0 :(得分:2)

您必须使用装饰器来更改类方法中的第一个参数,如果您不放置任何装饰器,则如果使用@classmethod装饰器,则函数必须使用defaulf(使用此方法的实例)的self参数。像下面这样,第一个参数是cls(方法的类):

class abc:
    a = 'abc'

    @classmethod
    def aFunction(cls, value)
        print(cls.a + value)

第二个修饰符(可能是您正在寻找的修饰符)允许您使用不带默认参数的类方法:

class abc:
    def __init__(self,value):
        self.value = value

    @staticmethod
    def aFunction(value):
        return value+'abc'

答案 1 :(得分:0)

self实际上是很长一段时间以来使用的约定,而不是真正的python关键字。 self只是函数中的一个参数,您可以轻松地使用另一个参数名称来代替它。

那为什么要使用self 因为它是可取的,因为它可以提高代码的可读性。

此外,如果该方法不需要self,则通常表示它应该是静态方法