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