在軟體設計中會遇到這樣的問題:有些屬性之間有相互關聯。這樣,其中的乙個屬性變化的時候其他的屬性也應該跟隨變化。
先看一段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結構就是瀏覽器 伺服器結構,它所有的功能,都是在瀏...