歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python的@符號

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

<__main__.Myclass instance at 0x00000000028C2F48>

>>> my2=Myclass()

>>> print my2

<__main__.Myclass instance at 0x00000000028C2F48>

--------------------------------------分割線 --------------------------------------

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 的下載地址:請點這裡 

Copyright © Linux教程網 All Rights Reserved