Python高階之「屬性(property)」詳解

2021-09-27 06:49:26 字數 1981 閱讀 2315

python中有乙個被稱為屬性函式(property)的小概念,它可以做一些有用的事情。在這篇文章中,我們將看到如何能做以下幾點:

讓我們假設我們有一些遺留**,它們是由一些對python理解得不夠好的人寫的。如果你像我一樣,你之前已經看到過這類的**:

# coding=utf-8

# __author__ = 'lenovo'

# 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)##

# a = person('zhang', 'san')

# print(a.full_name)

# print(a.first_name)

# # print(a.full_name='123') # 我們將方法變成了屬性,我們可以使用正常的點符號訪問它。

# # 但是,如果我們試圖將該屬性設為其他值,我們會引發乙個attributeerror錯誤。改變full_name屬性的唯一方法是間接這樣做:

# a.first_name = 'li'

# print(a.full_name)

from decimal import decimal

class fees(object):

""""""

def __init__(self):

"""constructor"""

self._fee = none

@property

def fee(self):

"""return the current fee

"""return self._fee

@fee.setter

def fee(self, value):

"""set the fee

"""if isinstance(value, str):

self._fee = decimal(value)

elif isinstance(value, decimal):

self._fee = value

# fee = property(get_fee, set_fee) # 我們在這段**的末尾新增了一行。現在我們可以這樣做:

# f = fees()

# print(f.set_fee('1'))

# print(f.fee)

## f.fee = '2'

# print(f.get_fee())

if __name__ == "__main__":

f = fees()

f.fee = '1'

print(f.fee)

# 如果你想新增可以使用正常點符號訪問的屬性,而不破壞所有依賴於這段**的應用程式,你可以通過新增乙個屬性函式非常簡單地改變它:

# 上面的**演示了如何為fee屬性建立乙個setter方法。你可以用乙個名為@fee.setter的裝飾器裝飾第二個方法名也為fee的方法來實現這個。當你如下所做時,setter被呼叫:

# 如果你看屬性函式的說明,它有fget, fset, fdel和doc幾個引數。如果你想對屬性使用del命令,你可以使用@fee.deleter建立另乙個裝飾器來裝飾相同名字的函式從而實現刪除的同樣效果

vue元件之Prop屬性

一般頁面元素是有屬性的,如a標籤有href等屬性,同樣vue中元件也是有屬性的。在vue元件中想要使用屬性,首先需要在元件內部定義一些屬性,這些屬性在vue中被為prop,在元件中通過props選項中定義。props的型別 在vue元件中,props選項的型別可以是乙個字串陣列,也可以是乙個物件。如...

android 關於prop屬性

android通過systemproperties的set和get方法來控制很多東西,一般上層新增乙個控制開關可以使用這個方法,在系統裡面存在很多個prop檔案。它們分別是system build.prop,system etc prop.default,vendor build.prop,vend...

Vue元件prop屬性

vue.component blog post post title hello 所有的 prop 都使得其父子 prop 之間形成了乙個單向下行繫結 父級 prop 的更新會向下流動到子元件中,但是反過來則不行。每次父級元件發生更新時,子元件中所有的 prop 都將會重新整理為最新的值。這意味著你...