热线电话:13121318867

登录
首页精彩阅读类方法--戴着@classmethod帽子的函数
类方法--戴着@classmethod帽子的函数
2022-03-29
收藏
类方法--戴着@classmethod帽子的函数

作者:Kevin

来源:麦叔编程

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学习者了。

数据分析咨询请扫描二维码

最新资讯
更多
客服在线
立即咨询