這是一個處理數學/物理方程的類的設計原則問題,用戶可以設置任何其餘參數正在計算的參數。 在這個例子中,我希望能夠設置頻率,同時避免循環依賴。如何在設置屬性時避免循環依賴?
例如:
from traits.api import HasTraits, Float, Property
from scipy.constants import c, h
class Photon(HasTraits):
wavelength = Float # would like to do Property, but that would be circular?
frequency = Property(depends_on = 'wavelength')
energy = Property(depends_on = ['wavelength, frequency'])
def _get_frequency(self):
return c/self.wavelength
def _get_energy(self):
return h*self.frequency
我也知道這裏的更新觸發時機的問題,因爲我不知道該序列的更新將被觸發:
- 波長爲已更改
- 觸發兩個相關實體的更新:頻率和能量
- 但是,需要更新能量頻率以便能量具有fitt值對新的波長!
(答案被接受還應該解決這個潛在的計時問題。)
那麼,什麼是最好的設計模式來解決這些相互依存的問題?最後,我希望用戶能夠更新波長,頻率和頻率/波長,並且能量應相應更新。
這種問題當然會出現在基本上所有試圖處理方程的類中。
讓比賽開始吧! ;)
我認爲traits.api可能會滿足您的需求。是否有任何理由標準問題屬性不適合你?特質主要用於建立課間,而不是從我在他們的頁面上看到的課堂內依賴關係;你正在做類內依賴關係。 – 2012-03-30 21:52:18
我不同意,因爲類內依賴對設計GUI非常有幫助,相關的traits.ui庫建立在特徵之上。 – 2012-03-30 21:55:22
即用於解決某些計算/數據分析任務的迷你GUI或小型應用程序。這些功能對於大規模GUI應用程序來說效果如何,我不知道,但至少對於GUI元素觸發內容和其他內容的快速應用程序開發自動更新而言,這些屬性是非常巧妙的。 – 2012-03-30 21:58:38