python @staticmethod和@classmethod的作用与区别
Posted champaign
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python @staticmethod和@classmethod的作用与区别相关的知识,希望对你有一定的参考价值。
class test: class_name = "test" def __init__(self, name): self.class_name = name def my_print(self, value): print(value + " " +self.class_name) @staticmethod def my_static_print(val): print(val) @classmethod def my_class_print(cls, val): print(val +" "+ cls.class_name) if __name__ == "__main__": my_test = test("xxx") test.my_static_print("static print") test.my_class_print("class print") my_test.my_static_print("static print") my_test.my_class_print("class print") my_test.my_print("my_print")
执行结果如下:
static print class print test static print class print test my_print xxx
个人理解:
@staticmethod 不需要访问和类相关的属性或数据(感觉只是概念上的区别,你这样申请了用的人就知道了,如果你非要在这个方法中访问test.xxx 它就和@classmethod的作用一样了。)
@classmethod 可以访问和类相关(不和实例相关)的属性,看 test.my_class_print("class print") 和 my_test.my_class_print("class print") 的结果都是class中定义的class_name 的值,非实例的值:xxx
如果你定义了一个方法它的返回值永远和类的属性及实例无关,结果永远不变,就用@staticmethod
如果你定义了一个方法它的返回值和只和类的属性有关,结果可变(比如上例,我用test.class_name="AAA"改变类的属性值,my_class_print输出的结果就改变了) .就用@classmethod
以上是关于python @staticmethod和@classmethod的作用与区别的主要内容,如果未能解决你的问题,请参考以下文章
python的@classmethod和@staticmethod
当我需要在 python 编程中使用@staticmethod 和@classmethod 时? [复制]
Python中@staticmethod 和@classmethod 的区别
python中@staticmethod@classmethod和实例方法