staticmethod
在使用staticmethod装饰器后,类函数可以用实例化对象或者类来调用该函数。
class Te:
@staticmethod
def add(a, b):
return a+b
def add_self(self, a, b):
return a+b
cal = Te()
# 可通过类名直接使用静态函数
result1_1 = Te.add(1, 2)
# Te不能像上一行那样直接a+b了,因为这个不是静态函数,
# 如果硬要在Te使用这个函数,只能在传入类对象后才能使用。
result1_2 = Te.add_self(cal ,1, 2)
# 实例化后的类对象可以正常使用所有的函数,变量
result2_1 = cal.add(1 ,2)
result2_2 = cal.add_self(1, 2)
运行后就可以发现,无论是通过类调用函数还是实例化对象后再调用函数都能成功执行add函数。
classmethod
在使用classmethod装饰器后,类函数可以用实例化对象或者类来调用该函数。并可以拿到类里面定义的参数的值。
class Te:
value = 1
def __init__(self):
self.key = 2
@classmethod
def show_value(cls):
return cls.value
@classmethod
def add_by_cls(cls, a, b):
return a+b
# 通过类名拿到类中value的值,拿到1
# 但是通过类名,并不能拿到self.key的值,因为self.key是实例属性,value是类属性
result1 = Te.show_value()
# 通过类名执行add_by_cls函数,拿到3
result2 = Te.add_by_cls(1, 2)
# 实例化一个对象后可以自由使用
cal = Te()
result3 = cal.show_value()
result4 = cal.add_by_cls(1, 2)