原文: https://pythonbasics.org/classmethod/

类方法是一种在所有对象之间共享的方法。 要调用类方法,请将类作为第一个参数。

可以从实例和类本身中调用类方法。 所有这些都使用相同的方法。 该方法可以使用类变量和方法。

示例

类方法示例

要将方法转换为类方法,请在方法定义之前添加@classmethod。 该方法始终将类作为参数。

下面的示例定义了一个类方法。 然后,类本身可以使用该类方法。 在此示例中,类方法使用类属性名称。

  1. class Fruit:
  2. name = 'Fruitas'
  3. @classmethod
  4. def printName(cls):
  5. print('The name is:', cls.name)
  6. Fruit.printName()

您可以同时使用对象和类的类方法:

  1. apple = Fruit()
  2. berry = Fruit()
  3. Fruit.printName()
  4. apple.printName()
  5. berry.printName()

现在,参数名称属于该类,如果您要通过使用对象来更改名称,它将忽略该参数。 但是,如果您要按班级进行操作,则它会更改,例如以下示例:

  1. apple.name="Apple"
  2. Fruit.printName()
  3. apple.printName()
  4. berry.printName()
  5. Fruit.name="Apple"
  6. Fruit.printName()
  7. apple.printName()
  8. berry.printName()

替代表示法

通常使用 pythonic 表示法,但这并不是严格要求的。
您也可以使用这样的类方法:

  1. class Fruit:
  2. name = 'Fruitas'
  3. def printName(cls):
  4. print('The name is:', cls.name)
  5. Fruit.printAge = classmethod(Fruit.printName)
  6. Fruit.printAge()

类方法与静态方法

类似于静态方法,类方法不需要实例化对象。

类方法与静态方法的不同之处在于,静态方法不了解类本身。 在类方法中,参数始终是类本身。

静态方法对类或实例一无所知。 您也可以使用函数调用。

类方法在调用该方法时获取该类。 它了解类的属性和方法。

练习

类方法文章的练习:

  • 什么是类方法?
  • 类方法与静态方法有何不同?

下载示例