python中常用的內(nèi)置裝飾器

@property
使調(diào)用類中的方法像引用類中的字段屬性一樣。被修飾的特性方法,內(nèi)部可以實現(xiàn)處理邏輯,但對外提供統(tǒng)一的調(diào)用方式。遵循了統(tǒng)一訪問的原則。

示例:

coding: utf-8

class TestClass:
name = "test"

def __init__(self, name):
    self.name = name

@property
def sayHello(self):
    print "hello", self.name

cls = TestClass("felix")
print "通過實例引用屬性"
print cls.name
print "像引用屬性一樣調(diào)用@property修飾的方法"
cls.sayHello
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
輸出結(jié)果:

通過實例引用屬性
felix
像引用屬性一樣調(diào)用@property修飾的方法
hello felix
1
2
3
4
此外,@property可以用來實現(xiàn)類似與Java中set和get方法

@staticmethod
將類中的方法裝飾為靜態(tài)方法,即類不需要創(chuàng)建實例的情況下,可以通過類名直接引用。到達將函數(shù)功能與實例解綁的效果。

示例:

coding: utf-8

class TestClass:
name = "test"

def __init__(self, name):
    self.name = name

@staticmethod
def fun(self, x, y):
    return  x + y

cls = TestClass("felix")
print "通過實例引用方法"
print cls.fun(None, 2, 3) # 參數(shù)個數(shù)必須與定義中的個數(shù)保持一致,否則報錯

print "類名直接引用靜態(tài)方法"
print TestClass.fun(None, 2, 3) # 參數(shù)個數(shù)必須與定義中的個數(shù)保持一致,否則報錯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
輸出結(jié)果:

通過實例引用方法
5
類名直接引用靜態(tài)方法
5
1
2
3
4
@classmethod
類方法的第一個參數(shù)是一個類,是將類本身作為操作的方法。類方法被哪個類調(diào)用,就傳入哪個類作為第一個參數(shù)進行操作。

實例:

coding: utf-8

class Car(object):
car = "audi"

@classmethod
def value(self, category): # 可定義多個參數(shù),但第一個參數(shù)為類本身
    print "%s car of %s" % (category, self.car)

class BMW(Car):
car = "BMW"

class Benz(Car):
car = "Benz"

print "通過實例調(diào)用"
baoma = BMW()
baoma.value("Normal") # 由于第一個參數(shù)為類本身,調(diào)用時傳入的參數(shù)對應的時category

print "通過類名直接調(diào)用"
Benz.value("SUV")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
輸出結(jié)果:

通過實例調(diào)用
Normal car of BMW
通過類名直接調(diào)用
SUV car of Benz
注意,靜態(tài)方法和類方法是為類操作準備的。雖然通過實例也能調(diào)用,但是不建議。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容