python - 静态方法、类方法、普通方法
区别
静态方法、类方法、普通方法的区别:
- 静态方法:用@staticmethod装饰的,不带self参数的方法,叫做静态方法。类的静态方法可以没有参数,可以直接使用类名调用。也可以使用对象调用。
- 类方法: 用@classmethod装饰的,默认带cls参数的方法。可以被类和对象调用。
- 普通方法:默认带self参数。只能被对象调用。
class Test_1: @staticmethod def fun1(): print('静态方法') @classmethod def fun2(cls): print('类方法') def fun3(self): print('普通方法') Test_1.fun1() Test_1.fun2() obj = Test_1() obj.fun1() obj.fun2() obj.fun3()
静态方法
静态方法是类中的函数,不需要实例。
静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。可以理解为将静态方法存在此类的名称空间中。事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数。
例如,定义一个关于时间操作的类,其中有一个获得当前时间的函数,就可以使用静态函数。将获得时间的函数与实例解绑,想获得当前时间时,并不一定需要实例化对象,此时更像是一种名称空间。
import time class Test_1: def __init__(self, hour, minutes, seconds): self.hour = hour self.minutes = minutes self.seconds = seconds @staticmethod def func1(): print(time.strftime('%H:%M:%S')) Test_1.func1() # 16:43:17 Test_1(1,1,1).func1() # 16:43:17,与实例无关
我们可以在类外面写一个函数来做这些,但这样就扩散了类代码的关系到类定义外面,会导致以后代码维护困难