@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回答
-
返回实例是什么意思?一个静态方法或者类方法返回什么不是由函数内部return决定的吗?我没太懂这里说的返回时指什么?
012019-08-10
相似问题