内容纲要
类方法和静态方法
在 Java 里,类方法和静态方法是一个意思,就是用 static
修饰的方法
python 也有静态方法的概念,同时还有个和静态方法很相似的类方法,这就让人有点头大了,他们的区别是什么呢?各自适合怎样的场景呢?
区别
先看下代码吧
class Test(object):
id = 100
# 静态方法
@staticmethod
def static_mothed():
pass
# 类方法
@classmethod
def class_mothed(cls):
pass
仅仅从代码上看,区别就是参数的不同,类方法比静态方法多了个 cls
的参数,该参数表示当前类即 Test
那么,这个 cls
参数能干啥呢?它可以
- 调用类的实例化方法,即
test = cls()
- 获取类的属性或方法,即
x = cls.id
- 调用类的静态方法
静态方法没有 cls
参数,就不能做到以上功能了吗?实际上没有 cls
也可以,我们可以直接用类名,如下
- 直接用类名来调用实例化方法,
test = Test()
- 直接用类名来调用类属性,或方法,
x = Test.id
那么区别在哪呢?
DRY 原则
软件开发有个 DRY 原则,即 Don’t repeat yourself
基于该原则,如果我们在静态方法里需要用到类的实例化或者访问其类方法、类属性,用 cls
参数比直接用类名要更优
比如说,如果你改了类名,用 cls
参数时,无需修改源码,如果你用的是类名,那你将不得不一个一个修改对应的类名
使用场景
如果你的方法完全不需要用到类实例化,或者类属性、类方法,那就用静态方法吧,就类似 Java 的工具类 XxxUtils
否则,用类方法
Java 程序猿学 python:类方法和静态方法