新聞中心
本篇內(nèi)容介紹了“python的property怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站制作、成都網(wǎng)站設計、稱多網(wǎng)絡推廣、成都小程序開發(fā)、稱多網(wǎng)絡營銷、稱多企業(yè)策劃、稱多品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供稱多建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
一、聯(lián)動
案例:
class Goods:def __init__(self, name, price, count=1):self.name = name # 商品名稱self.price = price # 商品單價self.count = float(count) # 商品數(shù)量self.total = price*count apple = Goods('蘋果', 5, 2)print(apple.total)apple.count = 3print(apple.total)out:1010
在上述案例中建了一個Goods(商品)類,它有name(商品名稱)、price(商品單價)、count(商品數(shù)量)。它內(nèi)部還有個toatl(商品總價)屬性,這個屬性是根據(jù)單價乘數(shù)量計算得來的。
接下來建了一個實例:apple,名稱是蘋果,單價是5,數(shù)量是2?,F(xiàn)在打印apple.total顯示是10,結(jié)果正常,可是當我們把數(shù)量改成3以后再打印apple.total結(jié)果仍然是10,數(shù)據(jù)沒有產(chǎn)生聯(lián)動!編程的時候一定要避免這樣的情況發(fā)生。
正解:
class Goods:def __init__(self, name, price, count=1):self.name = name # 商品名稱self.price = price # 商品單價self.count = float(count) # 商品數(shù)量@propertydef total(self): # 商品總價return self.price*self.count apple = Goods('蘋果', 5, 2)print(apple.total)apple.count = 3print(apple.total)
在這段代碼中,通過將total方法偽裝成屬性的方式,我們可以獲得聯(lián)動的total屬性。
好了,請記住使用property的第一條優(yōu)點——數(shù)據(jù)聯(lián)動。
二、健壯
繼續(xù)上述的案例講健壯,假設商品數(shù)量是售貨員手動輸入的,若遇到售貨員不小心將數(shù)量輸成了’a’會發(fā)生什么呢?
class Goods:def __init__(self, name, price, count=1):self.name = name # 商品名稱self.price = price # 商品單價self.count = float(count) # 商品數(shù)量@propertydef total(self): # 商品總價return self.price*self.count apple = Goods('蘋果', 5, 'a')print(apple.total)out:ValueError: could not convert string to float: 'a'
這下程序直接報錯,異常退出了!當然你可以指責售貨員的不小心,但同時也不能否認自己編寫的代碼容錯率低,也就是不健壯,動不動就報錯!合格的程序員編寫代碼時必須考慮到各種情況,提高程序的健壯性。下面我們針對上述的情況更正代碼:
class Goods:def __init__(self, name, price, count=1):self.name = name # 商品名稱self.price = price # 商品單價self.__count = count # 商品數(shù)量@propertydef count(self):try:self.__count = float(self.__count)except ValueError:print('輸入數(shù)量有誤,數(shù)值自動修正為1.0,請注意核對!')self.__count = 1.0return self.__count @count.setterdef count(self, n):try:n = float(n)except ValueError:print('輸入數(shù)量有誤,數(shù)值自動修正為1.0,請注意核對!')n = 1.0self.__count = n @propertydef total(self): # 商品總價return self.price*self.count apple = Goods('蘋果', 5, 'a')print(apple.total)apple.count = 'bb'print(apple.total)out:輸入數(shù)量有誤,數(shù)值自動修正為1.0,請注意核對!5.0輸入數(shù)量有誤,數(shù)值自動修正為1.0,請注意核對!5.0
注意@函數(shù)名.setter的寫法,這個函數(shù)名要和前一個@property下一行的函數(shù)名要一致。
三、安全
繼續(xù)上述的代碼講安全,數(shù)據(jù)安全有一項重要的內(nèi)容就是確保數(shù)據(jù)值在合理范圍區(qū)間,如果不對重要數(shù)據(jù)進行值范圍校驗就會發(fā)生重大差錯。假設上述案例中某營業(yè)員將銷售數(shù)量改成負數(shù)會發(fā)生什么?顯而易見的會發(fā)生賬目差錯,所以我們要對count數(shù)值進行校驗,不能接受負數(shù)。
因此必須修改@count.setter部分:
@count.setterdef count(self, n):try:n = float(n)if n < 0:print('輸入數(shù)量有誤,數(shù)值自動修正為0,請注意核對!')n = 0except ValueError:print('輸入數(shù)量有誤,數(shù)值自動修正為1.0,請注意核對!')n = 1.0self.__count = n
最后補充一下property的deleter部分,它可以在調(diào)用del apple.count時刪除__count屬性:
@count.deleterdef count(self):del self.__count
“python的property怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
網(wǎng)頁名稱:python的property怎么使用
網(wǎng)頁地址:http://fisionsoft.com.cn/article/pgdocd.html