目录
示例
一般创建类(里面包含N个方法)后,需要使用里面的方法实现某种特定功能,需要实例化类,然后再通过实例后的类访问它里面的方法,例如:
class test_classmethod(object):
def printd(self,a ,b):
c = a+b
print (c)
if __name__ == '__main__':
c =test_classmethod()
c.printd(3,5)运行结果为 8
如果不想做实例化这一步,可以在 def printd(self,a ,b) 上面加上 @classmethod,如下:
class test_classmethod(object):
@classmethod
def printd(cls,a ,b):
c = a+b
print (c)
if __name__ == '__main__':
test_classmethod.printd(3,5)classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。如下:
class A():
a = 1
def def1(self):
print("foo")
@classmethod
def def2(cls):
print('def2')
print(cls.a)
cls().def1() # 调用 foo 方法
A.def2()运行结果:
def2
1
foo其中类中定义的变量是有要求的,如果是以下的写法会报错:
class A():
def __init__(self):
a = 1
def def1(self):
print("foo")
@classmethod
def def2(cls):
print('def2')
print(cls.a)
cls().def1() # 调用 foo 方法
A.def2()class A():
def __init__(self):
self.a = 1
def def1(self):
print("foo")
@classmethod
def def2(cls):
print('def2')
print(cls.a)
cls().def1() # 调用 foo 方法
A.def2()主要作用
装饰器主要是和他们完全不同,主要作用是在本方法之外,附加一些额外功能(在不改变原代码的基础上),例如,我写一些基础的方法,a功能(属于A组程序员)、b功能(属于B组程序员)、c功能(属于C组程序员)都需要调用这个方法,有天公司加了D组、E组、F组。但领导规定,只能A、B、C组调用,其他组不能调用该功能,存在风险。那么就需要我来写一个验证的方法,装饰到该功能上
装饰器就是将要调用的方法a包裹在另一个方法中W1中,通过w1的功能执行通过后再执行a,否则就不执行调用的a功能。