python中的@property

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_nameself.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'

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Python中有個很贊的概念,叫做property,它使得面向對象的編程更加簡單。在詳細解釋和深入了解Python...
    chen_000閱讀 881評論 0 1
  • Python中的property是用于實現屬性可管理性的bulit-in數據類型(從表現上來看,property是...
    MontyOak閱讀 149評論 0 0
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • 20- 枚舉,枚舉原始值,枚舉相關值,switch提取枚舉關聯值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,314評論 1 6
  • 我們的感官并不比一個孩童來的更直接,我們所做的事情,或者對于事物的理解往往是受邏輯思維限制的,孩童則不然,他們靠的...
    藝術家清樾閱讀 645評論 1 6