class Bird:# classmethod修饰的方法是类方法@classmethoddef fly (cls):print('类方法fly: ',cls)# staticmethod修饰的方法是静态方法# @staticmethoddef info (p):print('静态方法info: ', p)if __name__ == '__main__':# 调用类方法,Bird类会自动绑定到第一个参数Bird.fly() #①# 调用静态方法,不会自动绑定,因此程序必须手动绑定第一个参数Bird.info('crazyit')# # 创建Bird对象b = Bird()# # 使用对象调用fly()类方法,其实依然还是使用类调用,# # 因此第一个参数依然被自动绑定到Bird类b.fly() #②# # 使用对象调用info()静态方法,其实依然还是使用类调用,# # 因此程序必须为第一个参数执行绑定b.info('网络毒刘')
总结
实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象,一般习惯用self。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类,一般习惯用cls。