@staticmethod和@classmethod是python中的两个装饰器(装饰器理解请见:python装饰器)。
@staticmethod
将函数转换成为一个静态方法,@classmethod
将函数转换成为一个类方法。
# coding=utf-8
class Function(object):
# Instance method
def add(self, n1, n2):
print("add : {} + {} = {}".format(n1, n2, n1 + n2))
@classmethod
def minus(cls, n1, n2):
print("minus : {} - {} = {}".format(n1, n2, n1 - n2))
@staticmethod
def multiply(n1, n2):
print("multiply : {} - {} = {}".format(n1, n2, n1 * n2))
if __name__ == '__main__':
f = Function()
f.add(3, 2) # 输出:add : 3 + 2 = 5
f.minus(3, 2) # 输出:minus : 3 - 2 = 1
Function().minus(3, 2) # 输出:minus : 3 - 2 = 1
Function().multiply(3, 2) # 输出:multiply : 3 - 2 = 6
f.multiply(3, 2) # 输出 : multiply : 3 - 2 = 6
实例方法 | 类方法(classmethod) | 静态方法(staticmethod) | |
---|---|---|---|
定义方式 | self作为第一个参数 | cls作为第一个参数 | 无强制参数 |
绑定对象 | 类的实例 | 类 | 无 |
调用方式 | 只能通过类的实例调用 | 类对象或类的实例均可调用 | 类对象或类的实例均可调用 |
@staticmethod
@classmethod