事实上,Python 完全支持定义类方法,甚至支持定义静态方法。 Python的类方法和静态方法很相似,推荐使用类调用(其实也可以使用对象调用)。
类方法和静态方法的区别是Python会自动绑定类方法的第一个参数,类方法的第一个参数(通常建议参数名是cls)会自动绑定到类本身;但对于静态方法不会自动绑定。
用@classmethod修饰的方法是类方法;用@staticmethod 修饰的方法是静态方法。
下面代码示范了定义类方法和静态方法:
class Bird:
# classmethod修饰的方法是类方法
@classmethod
def fly (cls):
print('类方法fly: ', cls)
# staticmethod修饰的方法是静态方法
@staticmethod
def info (p):
print('静态方法info: ', p)
# 调用类方法,Bird类会自动绑定到第一个参数
Bird.fly() #①
# 调用静态方法,不会自动绑定,因此程序必须手动绑定第一个参数
Bird.info('crazyit')
# 创建Bird对象
b = Bird()
# 使用对象调用fly()类方法,其实依然还是使用类调用,
# 因此第一个参数依然被自动绑定到Bird类
b.fly() #②
# 使用对象调用info()静态方法,其实依然还是使用类调用,
# 因此程序必须为第一个参数执行绑定
b.info('fkit')
从上面加粗的代码可以看出,@classmethod修饰的方法是一个类方法,定义了一个cls参数,无论程序使用的是类还是对象,都会自动绑定到Bird类本身调用类方法。方法,Python总是会将类方法的第一个参数绑定到类本身,比如代码①和②的执行效果。
上面的程序还使用@staticmethod 定义了一个静态方法。程序也可以使用类调用静态方法,或者使用对象调用静态方法。无论使用哪种方法,Python 都不会对静态方法进行自动绑定。
在用Python编程时,一般不需要使用类方法或静态方法。程序可以使用函数代替类方法或静态方法。但是在特殊场景下(比如使用工厂模式),类方法或者静态方法也是不错的选择。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python TKinter的消息传递机制09/16
- ♥ 如何使用python getattr函数?12/10
- ♥ python中的frame是什么意思?09/03
- ♥ python中的getattr()是什么?09/28
- ♥ python如何加载Pillow包12/31
- ♥ python如何使用import()实现插件12/29
内容反馈