本文摘自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如何安装cvxopt
Python 创建空的list,以及append用法讲解
Python类中怎么定义方法
Python的调试;print()和断言(实例解析二)
使用Python监控linux内存并将其写入mongodb
Python对mysql数据库进行操作的实例详解
Python的变量和变量之间如何实现乘法运算
Python怎么查看数据类型
object怎么转换成float数据
Python怎么批量合并excel表格
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 装饰器@staticmethod和@classmethod有什么区别