Python中@staticmethod和@classmethod的用法
一般来说,调用某个类的方法,需要预先生成一个实例,再通过实例调用方法。Java中有静态方法,可以使用类直接进行调用。Python中提供了两个修饰符@staticmethod
和@classmethod
以达到类似效果,使用它们就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类中,同时有利于命名空间的整洁。
@staticmethod
@staticmethod
声明方法为静态方法,直接通过类名.方法名()调用。经过@staticmethod
修饰的方法,不需要self参数,其使用方法和直接调用函数一样。
1 | #直接定义一个test()函数 |
@classmethod
@classmethod
声明方法为类方法,直接通过类名.方法名()调用。经过@classmethod
修饰的方法,不需要self参数,但是需要一个标识类本身的cls参数。
1 | class T: |
@classmethod
另一个实用的用法:在不改变已经写好的类里面的方法的情况下,对输入的数据进行处理。
1 | # 输出年月日,正常的情况下 |
1 | # 如果用户输入的是2018-10-27格式,需要在输出前处理一下,就可以使用classmethod达到想要的效果 |
小结
@staticmethod
不需要表示自身对象的self参数和自身类的cls参数,就跟使用函数一样。@classmethod
也不需要self参数,但第一个参数需要是表示自身类的cls参数。- 在Python中类和实例都是对象,都占用了内存空间,合理使用
@staticmethod
和@classmethod
修饰符,就可以不经过实例化直接使用类的方法了。
引用文章: