我正在尋找一種在一個類中設定多個依賴屬性的方法。也許這個例子能進一步說明我所要做的事情。目前我正在用多個嵌套的try陳述句來解決這個問題。這似乎并不是正確的方法。
r""
正弦波的例子,其中:a * sin(2 * pi * f * t phi) = a * sin(omega * t phi)
"""
import numpy as np
class SineWave。
def __init__(self, a: float = 1., phi: float = 0。 , f: float = None, omega: float = None)。)
self.a = a
self.f = f
self.phi = phi
self.omega = omega
self.post_init()
def post_init(self) -> None:
try:
self.f = self.omega / (2 * np.pi)
except TypeError:
self.omega = 2 * np.pi * self.f
def __call__(self, t: float) -> float:
return self.a * np.sin(self.omega * t self.phi)
if __name__ == '__main__'/span>:
sin = SineWave(f=1)
print(sin(np.pi))
什么是正確的方法?
uj5u.com熱心網友回復:
考慮到你的邏輯,那么必須要求至少有一個引數f和omega必須被設定,否則應該有一個失敗。你可以用下面的陳述句來斷言這一點:
def __init__(self, a: float =1., phi: float = 0。 , f: float = None, omega: float = None)。)
if all(arg is None for arg in [f, omega])。) # 如果你有多個變數,這就很方便。但這也可以簡單地稱為<如果f是無,omega是無:>。
raise ValueError("required arguments are null"/span>)
...
在這個檢查之后,代碼的下一部分的設計是直接的,因為我們知道至少有一個引數被設定了:
def __init__(...) 。
...
自己。 f = f if f is not None else omega / (2 * np. pi)
自己。 omega = omega if omega is not None else 2 * np. pi * f
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310478.html
標籤:
