当前位置:   article > 正文

@staticmethod和@classmethod的区别和联系_django @staticmethod

django @staticmethod

背景

我们在使用Django的时候经常会用到 @classmethod,但是这个修饰符是什么意思了? 它和 @staticmethod 有什么区别吗?

 

先来讲一讲 @staticmethod

它表示返回函数的静态方法。静态方法,不需要类的实例化就可以更新调用类的函数和方法。例如:

  1. class C(object):
  2. @staticmethod
  3. def f():
  4. print('runoob');
  5. C.f(); # 静态方法无需实例化
  6. cobj = C()
  7. cobj.f() # 也可以实例化后调用

 

再来讲一讲 @classmethod

@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

如果在 @staticmethod 中要调用到这个类的一些属性方法,只能直接 类名.属性名类名.方法名。而 @classmethod 因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等。我们通过代码来理解。

  1. class A():
  2. xx = 1
  3. def func1(self):
  4. print("hahaha....")
  5. @classmethod
  6. def func2(cls):
  7. print("this is.....")
  8. print(cls.xx) # 输出属性
  9. cls().func1() # 调用 func1 方法
  10. ##测试,结果不需要实例化
  11. A.func2()

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/71663
推荐阅读
相关标签
  

闽ICP备14008679号