class Bird:
# classmethod修饰的方法是类方法
@classmethod
def fly (cls):
print('类方法fly: ',cls)
# staticmethod修饰的方法是静态方法
# @staticmethod
def info (p):
print('静态方法info: ', p)


if __name__ == '__main__':
# 调用类方法,Bird类会自动绑定到第一个参数
Bird.fly() #①
# 调用静态方法,不会自动绑定,因此程序必须手动绑定第一个参数
Bird.info('crazyit')
# # 创建Bird对象
b = Bird()
# # 使用对象调用fly()类方法,其实依然还是使用类调用,
# # 因此第一个参数依然被自动绑定到Bird类
b.fly() #②
# # 使用对象调用info()静态方法,其实依然还是使用类调用,
# # 因此程序必须为第一个参数执行绑定
b.info('网络毒刘')

【Python的黑魔法】实例方法、静态方法和类方法_静态方法

 

【Python的黑魔法】实例方法、静态方法和类方法_类方法_02

总结

实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。

 

 

实例方法,第一个参数必须要默认传实例对象,一般习惯用self。

静态方法,参数没有要求。

 

类方法,第一个参数必须要默认传类,一般习惯用cls。