Python的@符号

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
Python一直都属于用,没有去系统学习过,在一次代码review中见到了@符号,回来看了下,这个符号用于装饰器中,用于修饰一个函数,把被修饰的函数作为参数传递给装饰器,下面举几个例子:

1. @classmethod和@staticmethod

这两个含义很明显,在定义方法的时候@classmethod表示该方法是类方法,类方法必须有一个参数为cls,表示类本身,实例方法的第一个参数是self.@staticmethod修饰的方法基本上和一个全局函数相同。

这两个修饰的方法通过实例和类调用都是可以的

class A():

    @classmethod

    def classM(cls):

        print “class method, and invoker:”,cls.__name__

    @staticmethod

    def staticM():

        print “static method”

class B(A):

    pass

 

A.classM()  #class method, and invoker: A

B.classM()  #class method, and invoker: B

A.staticM() #static method

B.staticM() #static method

a=A()

a.classM()  #class method, and invoker: A

a.staticM() #static method

b=B()

b.classM()  #class method, and invoker: B

b.staticM() #static method

2. 作为普通的修饰符,下面的定义类似于 testone=func(testone)

 

class C():

    def func(fn):

        def test(*args):

            print “hello”

        return test

    @func

    def testone(a,b):

        print a**2+b**2

    if __name__==”__main__”:

        testone(3,4)

 

 

#output:hello

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class C():

    def func(fn):

        def test(*args):

            print “hello”

            fn(*args)

        return test

    @func

    def testone(a,b):

        print a**2+b**2

    if __name__==”__main__”:

        testone(3,4)

 

#output:

hello

25

3. 不常见的写法,用来修饰一个class,在单例模式中能用到

def singleton(cls):

    instance={}

    def getinstance():

        if cls not in instance:

            instance[cls]=cls()

        return instance[cls]

    return getinstance

 

@singleton

class Myclass:

    pass

 

#output

>>> my1=Myclass()

>>> print my1

>>> my2=Myclass()

>>> print my2

————————————–分割线 ————————————–

CentOS上源码安装Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 语言的发展简史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的详细介绍请点这里
Python 的下载地址请点这里 

未经允许不得转载:演道网 » Python的@符号

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册