简单来说,用@classmethod 修饰的方法称为类方法,对于类方法,第一个参数必须为类对象,大多数人用cls作为第一个参数的名称。@staticmethod 修饰的方法是静态方法。
如何在类中怎么选用哪种方法:
如果实现类中的函数的功能需要使用对象的属性,那么这个函数就要声明程对象方法
实现函数的功能不需要对象的属性的前提下,如果需要类的字段,就声明成类方法
若既不需要对象属性,又不需要类的字段,就声明成静态方法。
# 定义一个类 Pig
class Pig:
# 定义一个静态方法
def walk(self):
print('散步') #定义一个walk方法,让类具有”散步“的能力
# 定义类方法sleep(使用@classmethod)
@classmethod
def sleep(cls):
print('地方',cls)
# 使用@staticmethod,定义静态方法eat
@staticmethod
def eat(param):
print('吃饭',param)
Pig.walk('jack') #利用类名,调用静态方法
Pig.sleep() # 利用类名,调用类方法sleep(), Pig.sleep()
Pig.eat('Tom') # 再使用类名调用静态方法eat,传入参数Tom
# 再使用实例化对象方法,调用walk()、sleep()和eat()方法
p = Pig() # 调用类的方法,必须先实例化,写出一个对象p
p.sleep() #执行睡觉命令,cls不用提供
p.walk() #执行散步命令,self不用提供
p.eat('b')