Python中有一個被稱為屬性函數(property)的小概念,它可以做一些有用的事情,將類方法轉換為只讀屬性
使用屬性函數的最簡單的方法之一是將它作為一個方法的裝飾器來使用。這可以讓你將一個類方法轉變成一個類屬性。當我需要做某些值的合并時,我發現這很有用。其他想要獲取它作為方法使用的人,發現在寫轉換函數時它很有用。讓我們來看一個簡單的例子:
########################################################################
class Person(object):
? ? """"""
? ? #----------------------------------------------------------------------
? ? def __init__(self, first_name, last_name):
? ? ? ? """Constructor"""
? ? ? ? self.first_name = first_name
? ? ? ? self.last_name = last_name
? ? #----------------------------------------------------------------------
? ? @property
? ? def full_name(self):
? ? ? ? """
? ? ? ? Return the full name
? ? ? ? """
? ? ? ? return "%s %s" % (self.first_name, self.last_name)
在上面的代碼中,我們創建了兩個類屬性:self.first_name和self.last_name。接下來,我們創建了一個full_name方法,它有一個@property裝飾器。這使我們能夠在Python解釋器會話中有如下的交互:
>>> person = Person("Mike", "Driscoll")
>>> person.full_name'Mike Driscoll'
>>> person.first_name'Mike'
>>> person.full_name = "Jackalope"
Traceback (most recent call last):?
? ? ?File "<string>", line 1, in<frament>
AttributeError: can't set attribute
正如你所看到的,因為我們將方法變成了屬性,我們可以使用正常的點符號訪問它。但是,如果我們試圖將該屬性設為其他值,我們會引發一個AttributeError錯誤。改變full_name屬性的唯一方法是間接這樣做:
>>>person.first_name="Dan"
>>>person.full_name
'Dan Driscoll'