Python物件屬性自動更新操作示例

2022-09-27 10:21:06 字數 1457 閱讀 3396

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

先看一段www.cppcns.com示例**:

# -*- coding:utf-8 -*-

#!python3

class democlss:

def __init__(self,val1,val2程式設計客棧):

self.val1= val1

self.val2= val2

self.sum= self.val1 + self.val2

obj = democlss(123,234)

print(obj.sum)

obj.val1 = 321

print(obj.sum)

**的執行結果如下:

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

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

# -*- coding:utf-8 -*-

#!python3

class democlss:

def __init__(self,val1,val2):

self.val1= val1

self.val2= val2

def sum(self):

return self.val1 + self.val2

obj = democlss(123,234)

print(obj.sum())

obj.val1 = 321

print(obj.sum())

程式的執行結果如下:

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

# -*- coding:utf-8 -*程式設計客棧-

#!python3

class

def __init__(self,val1,val2):

self.val1= val1

self.val2= val2

@property

def sum(self):

return self.val1 + self.val2

obj = democlss(123,234)

print(obj.sum)

obj.val1 = 321

print(obj.sum)

程式執行結果如下:

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

Python物件屬性的自動更新

在軟體設計中會遇到這樣的問題 有些屬性之間有相互關聯。這樣,其中的乙個屬性變化的時候其他的屬性也應該跟隨變化。先看一段示例 usr bin python class democlss def init self,val1,val2 self.val1 val1 self.val2 val2 self...

python自動更新SVN

usr bin env python encoding utf 8 file svnupdate.py contact 512759438 qq.com author jian setting closeonend 0 不自動關閉對話方塊 closeonend 1 如果沒發生錯誤則自動關閉對話方塊 ...

自動更新原理

安裝補丁的時候,客戶端的主程式一般是要關閉的,除非採用動態解除安裝 調入元件的技術,比如網路遊戲,就是盡量讓玩家邊玩遊戲邊更新。人們嫌這樣的公升級仍然太麻煩,後來出現了b s結構,大家像抓住了救命稻草一樣的追捧至今,希望能從這些勞動中解脫出來。b s結構就是瀏覽器 伺服器結構,它所有的功能,都是在瀏...