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 都將會重新整理為最新的值。這意味著你...