@staticmethod 和 @classmethod 的区别

来源:9-14 继承.

Whalien

2019-08-08

之前在学习类的静态方法和类方法的时候比较好奇两者的区别,课后查了一下,知乎的最高赞回答中有这么一段话:

一般来说classmethod可以完全替代staticmethod。staticmethod唯一的好处是调用时它返回的是一个真正的函数,而且每次调用时返回同一个实例(classmethod则会对基类和子类返回不同的bound method实例),但这点几乎从来没有什么时候是有用的。不过,staticmethod可以在子类上被重写为classmethod,反之亦然,因此也没有必要提前将staticmethod全部改为classmethod,按需要使用即可。

其中:“staticmethod唯一的好处是调用时它返回的是一个真正的函数,而且每次调用时返回同一个实例(classmethod则会对基类和子类返回不同的bound method实例)”不太理解,学完继承后进行了如下测试:
测试代码和结果

老师,这结果是表示staticmethod和classmethod都是返回不同的实例吗?如果不是,又该怎么理解我加粗的那句话呢?

写回答

1回答

7七月

2019-08-09

返回实例是什么意思?一个静态方法或者类方法返回什么不是由函数内部return决定的吗?我没太懂这里说的返回时指什么?

0
1
Whalien
我也看不懂,查了很多社区都没找到我能理解的示例,不过两者的区别大致理解了一些
2019-08-10
共1条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程