国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python對象屬性自動更新操作示例

2020-02-15 21:52:20
字體:
來源:轉載
供稿:網友

本文實例講述了Python對象屬性自動更新操作。分享給大家供大家參考,具體如下:

在軟件設計中會遇到這樣的問題:有些屬性之間有相互關聯。這樣,其中的一個屬性變化的時候其他的屬性也應該跟隨變化。

先看一段示例代碼:

# -*- coding:utf-8 -*-#!python3class DemoClss:  def __init__(self,val1,val2):    self.val1= val1    self.val2= val2    self.sum= self.val1 + self.val2obj = DemoClss(123,234)print(obj.sum)obj.val1 = 321print(obj.sum)

代碼的執行結果如下:

兩個結果一致!其實,這種類似的設計中我們大多時候是希望有一個sum屬性跟隨者兩個數值能夠自動變化。但是,上面的這種方式顯然是不行的,因為這種設計的生效只能夠是在初始化的時候生效。

那么,如果想要實現一個隨時求和的方法我們該怎么做呢?其實,我們可以通過方法來實現!代碼的改進如下:

# -*- coding:utf-8 -*-#!python3class DemoClss:  def __init__(self,val1,val2):    self.val1= val1    self.val2= val2  def sum(self):    return self.val1 + self.val2obj = DemoClss(123,234)print(obj.sum())obj.val1 = 321print(obj.sum())

程序的執行結果如下:

這樣的改進方式是可行的,但是卻總覺得有點不方便。因為總體上的實現并沒有體現出OOP的什么優勢,說穿了這其實還是函數調用而已。那么,能不能改進一下呢?我們期望的又是一種什么樣的效果呢?其實,我們需要的功能應該是一個初始化功能而方法功能的一個結合體,而這種類似功能的結合體是存在的,那就是特性。特性是一種看上去像方法的屬性,每次引用都會執行相關的方法。如此,代碼改進如下:

# -*- coding:utf-8 -*-#!python3class DemoClss:  def __init__(self,val1,val2):    self.val1= val1    self.val2= val2  @property  def sum(self):    return self.val1 + self.val2obj = DemoClss(123,234)print(obj.sum)obj.val1 = 321print(obj.sum)

程序執行結果如下:

這樣就實現了關聯屬性的自動更新,看上去更加符合人們的正常思維了。

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平阴县| 连云港市| 铜陵市| 城口县| 龙南县| 郎溪县| 新兴县| 浦县| 汪清县| 呼伦贝尔市| 贵德县| 大关县| 施甸县| 锦州市| 永城市| 育儿| 大同县| 武冈市| 达拉特旗| 安徽省| 西华县| 娄底市| 兴隆县| 白玉县| 连山| 东山县| 西平县| 定远县| 高邮市| 新化县| 黄山市| 桃园市| 临夏县| 丹凤县| 巩义市| SHOW| 张掖市| 台江县| 甘南县| 额敏县| 佛坪县|