内容简介:系统学python语法是好几年之前的事情了,印象中就是Python的黑魔法真的挺多的,一般你也用不到。今天就来讲一下staticmethod这个装饰器,是我这两天一直想记录下来的一个怪里怪气的东西。网上一般都说类静态方法要@staticmethod,而我实际试验不写也没啥问题的样子:
系统学 python 语法是好几年之前的事情了,印象中就是Python的黑魔法真的挺多的,一般你也用不到。
今天就来讲一下staticmethod这个装饰器,是我这两天一直想记录下来的一个怪里怪气的东西。
网上一般都说类静态方法要@staticmethod,而我实际试验不写也没啥问题的样子:
# -*- coding: utf-8 -*-
class haha:
def x():
print('x')
haha.x()
我们知道在python中一切皆是对象,所以haha类自身也是一个对象,上面的代码和下面等价:
# -*- coding: utf-8 -*-
class haha:
pass
def x():
print('x')
haha.x = x
haha.x()
就是往对象上赋值一个属性,保存一个函数。
既然这样就可以实现静态函数了,那还要staticmethod干嘛?看下面的报错就知道了:
# -*- coding: utf-8 -*-
class haha:
def x():
print('x')
obj = haha()
obj.x()
Traceback (most recent call last):
File "/Users/liangdong/Documents/gitlab/try/main.py", line 9, in <module>
obj.x()
TypeError: x() takes 0 positional arguments but 1 was given
通过类对象调用静态方法,python会自动加一个self到第一参数,而我们希望x()函数是静态方法,不需要self。
这时候就需要@staticmethod来影响这个行为了:
# -*- coding: utf-8 -*-
class haha:
@staticmethod
def x():
print('x')
obj = haha()
obj.x()
haha.x()
加上@staticmethod的haha类,无论是类还是对象都可以调用到x()方法,终于符合了类静态方法的正常行为表现。
以上所述就是小编给大家介绍的《staticmethod写和不写有什么区别?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
SSA:用户搜索心理与行为分析
[美] 罗森菲尔德(Louis Rosenfeld) / 汤海、蔡复青 / 清华大学出版社 / 2014-4-1 / 59.00
何为站内搜索分析(SSA)?它如何帮助你挖掘用户搜索曰志,从中洞悉用户搜索心理和行为,从而有针对性地改善用户体验,提升网站价值?这些都可以从《SSA:用户搜索心理与行为分析》中找到答案。《SSA:用户搜索心理与行为分析》首先通过故事来说明SSA是如何使Vanguard集团起死回生的,简要介绍SSA并指导读者动手实践。其次,通过丰富的实例来介绍很多工具和方法,帮助读者着手分析用户查询数据,从中获得更......一起来看看 《SSA:用户搜索心理与行为分析》 这本书的介绍吧!