これは、数学/物理方程式を扱うクラスの設計原則の問題であり、ユーザーは残りの計算に使用する任意のパラメーターを設定できます。この例では、循環依存を回避しながら頻度も設定できるようにしたいと考えています。
例えば:
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
更新がトリガーされるシーケンスがわからないため、ここで更新トリガーのタイミングの問題も認識しています。
- 波長変更中
- これにより、周波数とエネルギーの両方の依存エンティティの更新がトリガーされます
- しかし、エネルギーが新しい波長に適合する値を持つように、エネルギーは周波数を更新する必要があります!
(受け入れられる答えは、この潜在的なタイミングの問題にも対処する必要があります。)
では、これらの相互依存の問題を回避するための最適な設計パターンは何でしょうか? 最後に、ユーザーが波長または周波数のいずれかを更新できるようにして、周波数/波長とエネルギーをそれに応じて更新できるようにします。
もちろん、この種の問題は、基本的に方程式を扱おうとするすべてのクラスで発生します。
競争を始めましょう!;)