python中classmethod和staticmethod

本节主要翻译于sololearn项目的oop第6节

如果有兴趣可以从头开始看,我会尽量把这些文档翻译成中文来帮助大家入门

本节标题class&static methods

第一部分原文

在这里插入图片描述

翻译如下:
我们目前学习到的对象的方法都是通过对一个类(class)的实例化调用的,这种方法会传入方法的self参数(也就是最常见的_init_(self,xxx)这种方式
但是类方法是不同的,类方法被类调用,传的是方法的cls参数。
一个最常用的类方法是factory methods,这些类方法传了许多不同的参数给类构造器,从而实例化了一个类。
类方法(class method)被一个类方法装饰器(classmethod decorator)所标志
代码如下

class Rectangle: //矩形类
def init(self, width, height): //__init__初始化
self.width = width
self.height = height
def calculate_area(self): //返回它的面积
return self.width * self.height
@classmethod //类方法装饰器
def new_square(cls, side_length):
return cls(side_length, side_length)
square = Rectangle.new_square(5)
print(square.calculate_area())

算法结果25

new_square是一个在类中调用的类方法(不是在类的实例化中调用的)。它返回了cls 类一个新的对象。
技术上讲,self 和cls 都只是编程习惯,但你最好怀有一颗敬畏之心。

配套习题

在这里插入图片描述

个人理解

在上面那段代码中,square = Rectangle.new_square(5),调用了类方法,从而square就是一个新的对象(即cls(5,5))
所以square可以调用rectangle中的方法calculate_area计算面积
你可觉得这个功能没什么作用,但是实际上好处是很多的。因为C++拥有重载的特性可以达到这种目的,但是Python缺乏此类特性。所以,python使用classmethod的方式。让我们尝试一种另类的构造函数。

具体分析待续

猜你喜欢

转载自blog.csdn.net/weixin_43914889/article/details/87898924