當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python property()用法及代碼示例


property() 構造返回屬性屬性。

用法:

property(fget=None, fset=None, fdel=None, doc=None)

參數:

property() 采用四個可選參數:

  • fget(可選)- 獲取屬性值的函數。默認為None.
  • fset(可選)- 設置屬性值的函數。默認為None.
  • fdel(可選)- 刪除屬性值的函數。默認為None.
  • 文檔(可選)- 包含屬性文檔(文檔字符串)的字符串。默認為None.

返回:

property() 從給定的 getter、setter 和 deleter 返回屬性屬性。

  • 如果沒有給出參數,property() 返回一個不包含任何 getter、setter 或 deleter 的基本屬性屬性。
  • 如果文檔不提供,property()獲取 getter 函數的文檔字符串。

示例 1:使用 getter、setter 和 deleter 創建屬性

class Person:
    def __init__(self, name):
        self._name = name

    def get_name(self):
        print('Getting name')
        return self._name

    def set_name(self, value):
        print('Setting name to ' + value)
        self._name = value

    def del_name(self):
        print('Deleting name')
        del self._name

    # Set property to use get_name, set_name
    # and del_name methods
    name = property(get_name, set_name, del_name, 'Name property')

p = Person('Adam')
print(p.name)
p.name = 'John'
del p.name

輸出

Getting name
The name is: Adam
Setting name to John
Deleting name

這裏,_name 用作存儲Person 名稱的私有變量。

我們還設置了:

  • 獲取人名的getter方法get_name()
  • 設置人名的設置方法set_name()
  • 刪除方法del_name() 刪除人名。

現在,我們通過調用property() 方法設置一個新的屬性屬性name

如程序所示,引用p.name在內部調用get_name()作為getter,set_name()作為setter,del_name()作為deleter,通過方法內部的打印輸出。

示例 2:使用 @property 裝飾器

除了使用 property() ,您可以使用 Python decorator @property 來分配 getter、setter 和 deleter。

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        print('Getting name')
        return self._name

    @name.setter
    def name(self, value):
        print('Setting name to ' + value)
        self._name = value

    @name.deleter
    def name(self):
        print('Deleting name')
        del self._name

p = Person('Adam')
print('The name is:', p.name)
p.name = 'John'
del p.name

輸出

Getting name
The name is: Adam
Setting name to John
Deleting name

在這裏,我們沒有使用 property() ,而是使用了 @property 裝飾器。

首先,我們指定 name() 方法也是 Person 的一個屬性。如程序所示,這是通過在 getter 方法之前使用 @property 來完成的。

接下來,我們使用屬性名來指定setter和deleter。

這是通過將@name.setter 用於setter 方法和@name.deleter 用於deleter 方法來完成的。

注意,我們使用了相同的方法name(),但定義了不同的getter、setter和deleter。

現在,每當我們使用 p.name 時,它都會在內部調用適當的 getter、setter 和 deleter,如方法內部的打印輸出所示。

相關用法


注:本文由純淨天空篩選整理自 Python property()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。