蓝狮平台_蓝狮注册登录云技术中心

类方法--戴着@classmethod帽子的函数

image.png


081篇,讲解了@property和@staticmethod的用法,有看官就表示@staticmethod都说了为什么不把@classmethod也拿出来说说?今天的三分钟就专门讲解下@classmethod。



@classmethod

@classmethod与@staticmethod的区别


废话不多说,直接上代码:


class Circle: PI = 3.14159  @classmethod def calculate_area(cls, radius): a = (radius**2)*cls.PI return a


ca = Circle.calculate_area(4)

print("面积是:",ca)


================================ class Circle:  @staticmethod def area(radius): # 没有self关键字,但是需要传入参数 a = (radius**2)*3.14159 return a


a = Circle.area(4) # 无需实例化,直接从类里调 print("面积:",a)

对比之下我们发现类方法@classmethod的首个参数为cls,这个cls指向的是类本身。


cls.PI的含义就是,我的PI是从类里(cls)拿来用的。


而静态方法@staticmethod没有cls参数,所以它是拿不到类里存在的一些变量和方法,蓝狮注册研发专利「没错还有方法」。


下面演示一下怎么用类方法@classmethod去调用实例方法(注意代码中的注释):


class Circle: PI = 3.14159 # 类中的常量PI @classmethod def get_area(cls, radius): # 类方法 a = cls(radius).calculate() # 调用实例函数得到面积值,cls(radius)可以理解成实例化 return a def __init__(self, radius): # 构造方法,传入半径值radius self.radius = radius def calculate(self): # 实例方法,计算面积值a a = (self.radius**2)*self.PI return a


ca = Circle.get_area(4)

print("面积是:",ca)

看了上面的代码是不是感觉有点上头了?算个圆形面积,竟然搞了那么多代码。return (radius**2)*PI不香么?


但是我还是希望大家能好好理解下类函数的用法,如果本篇的内容能理解个七七八八,那么恭喜你,你已经超越了90%的Python学习者了。