本文摘自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与selenium以及chrome初级自动化操作的实例
Python中pillow知识点学习
Python中下划线怎么打
精通Python需要多久
Python中web框架(flask)的详解(代码示例)
Python实现一键多值字典的方法实现
Python中json模块和pickle模块的使用
Python怎么安装pygame
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 装饰器@staticmethod和@classmethod有什么区别