本文摘自php中文网,作者anonymity,侵删。
装饰器@staticmethod和@classmethod的区别是:@staticmethod不需要self和cls参数,@classmethod不需要self参数,但需要cls参数。

通常来说,我们使用一个类的方法时,首先要实例化这个类,再用实例化的类来调用其方法
1 2 3 4 5 6 7 8 9 10 11 12 | class Test(object):
"" "docstring for Test" ""
def __init__(self, arg=None):
super(Test, self).__init__()
self.arg = arg
def say_hi(self):
print 'hello wrold'
def main():
test = Test()
test.say_hi()
if __name__ == '__main__' :
main()
|
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Test(object):
"" "docstring for Test" ""
def __init__(self, arg=None):
super(Test, self).__init__()
self.arg = arg
def say_hi(self):
print 'hello wrold'
@staticmethod
def say_bad():
print 'say bad'
@classmethod
def say_good(cls):
print 'say good'
def main():
test = Test()
test.say_hi()
Test.say_bad()
Test.say_good()
if __name__ == '__main__' :
main()
|
@staticmethod或@classmethod的区别
类的普通方法,地一个参数需要self参数表示自身。
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
以上就是装饰器@staticmethod和@classmethod有什么区别的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python如何设置中文界面
Python是什么语言编写的
Python中_和__的区别是什么
Python程序员待遇如何
什么是Python?你应该学习和使用它的13个理由
Python代码的单行注释使用什么符号
如何使用 pylint 来规范 Python 代码风格(来自ibm)_Python
Python列表常用功能介绍
Python字符串如何拼接
Python中break和continue语句的差别(实例解析)
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 装饰器@staticmethod和@classmethod有什么区别