@staticmethod、@property、@classmethod
staticmethod:静态方法,不需要self和参数,不涉及对类中的方法、属性的操作;对于一个类,我们想要用其中的某个函数(方法),需要首先初始化这个类,然后调用方法,例如下面:如果我们没有在foo函数加staticmethod,我们首先需要初始化一个类:a = A(),a.foo().当我们加了staticmethod,就可以直接A.foo(),更加的简洁。
# 封装
class A(obeject):
@staticmethod # 静态方法
def foo(): # 当一个函数,既不用到实例对象的属性,又不用到类对象的属性时,可以使用静态方法
print('good')
# 不需要操作类对象,所以不要cls参数;也不需要操作实例对象,所以也不需要self参数
# 可以操作实例属性或者类属性,但是最好不要这么做
# print(p.name)
# print(Person.type)
# 调用
A.foo()
property:属性方法,只有一个self参数,把类中的方法(函数)当作属性进行调用。例如下面中的score方法,如果我们没有加上property装饰器,我们需要首先初始化类Student:s = Student(),s.score().当加上了装饰器property,我们就可以像调用类属性一样:s.score
class Student(object):
def __init__(self):
self.score_1 = 1
@property
def score(self):
print(self.score_1)
s = Student()
s.score
classmethod:类方法,不需要self,类方法是将类本身作为对象进行操作的方法
自定义装饰器:
自定义装饰器时需要的参数为一个函数,就可以给该函数加上一个功能