@

  首先这里介绍一下‘@’的作用,‘@’用作函数的修饰符,是python2.4新增的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。只可以对模块或者类定义的函数进行修饰,不允许修饰一个类。一个修饰也就是一个函数,它将被修饰的函数作为参数,并返回修饰后同名函数的调用。

#-*- coding:utf-8 -×-

def fun(f):
print 'AAAA'
return f('BBBB') @fun
def fun_1(s):
print s def fun_2(s):
print s
fun(fun_2)

输出:

AAAA
BBBB
AAAA
BBBB

@staticmethod和@classmethod

  python其实有3个方法,静态方法、类方法和实例方法如下:

#-*- coding:utf-8 -*-
def fun(x):
print "fun for %s"%x class A(object):
def fun(self,x):
print "fun for (%s,%s)"%(self,x) @classmethod
def class_fun(cls,x):
print "fun for (%s,%s)" % (cls, x) @staticmethod
def static_fun(x):
print "fun for %s" % x fun(1)
a=A()
a.fun(1)
a.class_fun(1)
a.static_fun(1) A().fun(1) #A.fun(1)是非法的
A.class_fun(1)
A.static_fun(1)

输出:

fun for 1
fun for (<__main__.A object at 0x7f40fd9c5ed0>,1)
fun for (<class '__main__.A'>,1)
fun for 1
fun for (<__main__.A object at 0x7f40fd9d4150>,1)
fun for (<class '__main__.A'>,1)
fun for 1

  这里先理解一下参数中的self和cls,这里的self和cls是对类或者实例的绑定。对于一般的函数来说我们可以直接调用,例如‘fun(1)’,这也是最常见的,它的工作和任何的类、实例没有关系,但类里面定义的方法都需要绑定这个实例,比如‘fun(self,x)’,之所以这样做,是因为实例方法的调用离不开实例,我们需要把实例自己传给参数,调用的时候比如‘a.fun(1)’(其实是fun(a,1)),类的方法也是一样的,只不过它传递的是类而不是实例,比如‘A.class_fun(1)’,注意这里的self和cls可以换成别的参数,但是python约定就是这样。

  实例方法  类方法  静态方法

  a=A()       a.fun(x)  a.class_fun(x

  A              不可用      A.class_fun

python中@staticmethod与@classmethod的更多相关文章

  1. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

  2. python中@staticmethod、@classmethod和实例方法

    1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: ...

  3. python中 staticmethod与classmethod

    原文地址https://blog.csdn.net/youngbit007/article/details/68957848 原文地址https://blog.csdn.net/weixin_3565 ...

  4. 面试题:python 中 staticmethod 和 classmethod有什么区别

    面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...

  5. python 中 staticmethod 和 classmethod有什么区别

    面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...

  6. python中 staticmethod与classmethod区别

    staticmethod与classmethod区别 参考 https://stackoverflow.com/questions/136097/what-is-the-difference-betw ...

  7. Python中@staticmethod和@classmethod的作用和区别

    简单介绍一下两者的区别: 对于一般的函数test(x),它跟类和类的实例没有任何关系,直接调用test(x)即可 #!/usr/bin/python # -*- coding:utf-8 -*- de ...

  8. (转)关于python3中staticmethod(静态方法)classmethod(类方法)实例方法的联系和区别

    原文:http://dmcoders.com/2017/08/30/pythonclass/ https://zhuanlan.zhihu.com/p/28010894------正确理解Python ...

  9. python 之@staticmethod和@classmethod

    在python中,要调用一个类中的方法,一般的操作步骤如下: 1.实例化此类 2.调用此类中的方法 而@staticmethod和@classmethod则打破了这种引用方式,可以在不实例化类的情况下 ...

随机推荐

  1. 访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决

    访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决 2017年05月09日 10:54:18 AinUser 阅读数:922 标签: el表达式4 ...

  2. 第07章:MongoDB-CRUD操作--文档--创建

    ①语法 insert() save()  --有修改没有新增 insertOne() [3.2版本新增]向指定集合中插入一条文档数据 insertMany() [3.2版本新增]向指定集合中插入多条文 ...

  3. react优化--pureComponent

    shouldComponentUpdate的默认渲染 在React Component的生命周期中,shouldComponentUpdate方法,默认返回true,也就意味着就算没有改变props或 ...

  4. oracle 数据库io 异常,错误代码17002 解决办法

    数据库使用一个月了,突然挂掉:错误代码17002 io异常:read timeout 解决: 1.登陆sql命令窗口 [oracle@hostname ~]$ sqlplus /nolog SQL*P ...

  5. ng-repeat动态改变样式

    当我们使用AngularJs的ng-repeat时候动态绑定数据时,遇到遍历出来的标签样式都一样,这时候希望根据数组的下标分别对应不同的样式 解决:使用$index获取数组下标根据下标改变样式 < ...

  6. 判断页面是app打开还是浏览器打开。cookie

    有个需求需要对页面判断不同的打开方式来最里面的链接进行不同调整, 这样就要分四种情况,app,浏览器X安卓系统,苹果系统,起初是对页面url地址带有的参数(安卓)跟用户代理(苹果)返回值判断navig ...

  7. 11.DataGrid分页

    前台页面: 后台程序:

  8. hdu 4901 划分序列使异或和==且和

    http://acm.hdu.edu.cn/showproblem.php?pid=4901 给定一个序列,要求选出两个集合,S和T,要求S中选中的元素的下标都要小于T中元素的下标.并且说S中元素的异 ...

  9. Tarjan缩点求入度为零的点的个数问题

    Description: 一堆人需要联系,但如果x 可以联系 y,你联系了x就不用联系y了,你联系一个人都会有固定的花费,问你最小联系多少人,和最小花费 Solution: Tarjan缩点,求出缩点 ...

  10. Maven的依赖管理

    我们知道dependencies是可以被继承的,这个时候我们就想到让我们的发生了共用的依赖元素转移到parent中,这样我们又进一步的优化了配置.可是问题也随之而来,如果有一天我创建了一个新的模块,但 ...