跳转至

三、类方法

1、类方法如何调用类属性

通过上面我们已经会定义类了,那么这里讲一下在同一个类里,类方法如何调用类属性的。

直接看个例子吧:

class ClassA():
    var1 = '两点水'

    @classmethod
    def fun1(cls):
        print('我是 fun1' + cls.var1)


ClassA.fun1()

输出结果如下:

我是 fun1两点水

注意看,在类方法上面多了个 @classmethod ,这是干嘛用的呢?

这是用于声明下面的函数是类函数。其实从名字就很好理解了。

class 就是类,method 就是方法。

那是不是一定需要注明这个呢?

答案是是的。

如果你没使用,是会报错的。

class ClassA():
    var1 = '两点水'

    def fun1(cls):
        print('我是 fun1' + cls.var1)


ClassA.fun1()

报错如下:

Traceback (most recent call last):
  File "/Users/twowater/dev/python/test/com/twowater/test.py", line 10, in <module>
    ClassA.fun1()
TypeError: fun1() missing 1 required positional argument: 'cls'

如果没有声明是类方法,方法参数中就没有 cls , 就没法通过 cls 获取到类属性。

因此类方法,想要调用类属性,需要以下步骤:

  • 在方法上面,用 @classmethod 声明该方法是类方法。只有声明了是类方法,才能使用类属性
  • 类方法想要使用类属性,在第一个参数中,需要写上 cls , cls 是 class 的缩写,其实意思就是把这个类作为参数,传给自己,这样就可以使用类属性了。
  • 类属性的使用方式就是 cls.变量名

记住喔,无论是 @classmethod 还是 cls ,都是不能省去的。

省了都会报错。

2、类方法传参

上面我们学习了类方法如何调用类属性,那么类方法如何传参呢?

其实很简单,跟普通的函数一样,直接增加参数就好了。

这个就直接上例子了:

class ClassA():
    var1 = '两点水'

    @classmethod
    def fun1(cls, age):  # 定义了个 age 参数
        print('我是 fun1' + cls.var1)
        print('年龄: ' + str(age))


ClassA.fun1(18)  # 多了个参数

打印的结果:

我是 fun1两点水
年龄: 18