5、类方法与静态方法
说明:类方法与静态方法相似,它们都推荐使用类来调用(可用对象来调用)
1)类方法
定义类方法:
- 使用 @classmethod 修饰
- 方法的第一个参数定义为 cls,用类调用该方法时该参数会自动绑定
class Tiger:
# 类方法:1、用 @classmethod 修饰;2、定义 cls 形参
@classmethod
def info(cls):
print('info类方法')
print(cls)
print(Tiger)
print('-'*30)
Tiger.info() # 类方法属于类本身,可用类调用。类方法的第一个参数 cls 绑定到调用该方法的类
print('-'*30)
t = Tiger()
t.info() # 对象调用类方法,实际上也相当于用类调用类方法,同样也会执行将第一个参数绑定当前类
<class '__main__.Tiger'>
------------------------------
info类方法
<class '__main__.Tiger'>
------------------------------
info类方法
<class '__main__.Tiger'>
比较:
- 类方法无论是用类调用还是实例调用都会自动绑定
- 实例方法用对象调用时自动绑定,当用类调用时不会自动绑定,需要传参
2)静态方法
定义静态方法:
-
使用 @staticmethod 修饰
-
静态方法相当于一个函数,不会自动绑定
class Tiger: # 静态方法:用 @staticmethod @staticmethod def info1(): print('info1静态方法') @staticmethod def info2(p): print('info2静态方法') print(p)
-
类调用静态方法
Tiger.info1() # 类调用静态方法(无参数时) print('-'*30) Tiger.info2('python') # 类调用静态方法(有参数时),需要传入参数
info1静态方法 ------------------------------ info2静态方法 python
-
对象调用静态方法
t = Tiger() t.info1() # 对象调用静态方法(无参数时) print('-'*30) t.info2('python') # 对象调用静态方法(有参数时),需要传入参数 print('-'*30)
info1静态方法 ------------------------------ info2静态方法 python
-
3)总结:
实例方法 | 类方法 | 静态方法 | |
---|---|---|---|
对象调用 | 自动绑定 | 自动绑定 | 不自动绑定 |
类调用 | 不自动绑定 | 自动绑定 | 不自动绑定 |