Java 程序猿学 python:类方法和静态方法

内容纲要

类方法和静态方法

在 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:类方法和静态方法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top
粤ICP备2020114259号 粤公网安备44030402004258