赞
踩
我们在使用Django的时候经常会用到 @classmethod,但是这个修饰符是什么意思了? 它和 @staticmethod 有什么区别吗?
它表示返回函数的静态方法。静态方法,不需要类的实例化就可以更新调用类的函数和方法。例如:
- class C(object):
- @staticmethod
- def f():
- print('runoob');
-
- C.f(); # 静态方法无需实例化
- cobj = C()
- cobj.f() # 也可以实例化后调用
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
如果在 @staticmethod 中要调用到这个类的一些属性方法,只能直接 类名.属性名 或 类名.方法名。而 @classmethod 因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等。我们通过代码来理解。
- class A():
- xx = 1
- def func1(self):
- print("hahaha....")
-
- @classmethod
- def func2(cls):
- print("this is.....")
- print(cls.xx) # 输出属性
- cls().func1() # 调用 func1 方法
-
- ##测试,结果不需要实例化
- A.func2()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。