我想创建一个Block
具有以下行为的类:如果设置了 iip3,则将 oip3 设置为 iip3 + 增益。如果设置了 oip3,则将 iip3 设置为 oip3 - 增益如下:
b = Block(gain = 10)
Block(gain=10, iip3=inf, oip3=inf)
b.oip3 = 30
Block(gain=10, iip3=20, oip3=30)
b.iip3 = 21
Block(gain=10, iip3=21, oip3=31)
我用 attrs 模块试过这个:
import attr
import numpy as np
def set_oip3(instance, attribute, iip3):
instance.oip3 = iip3 + instance.gain
return iip3
def set_iip3(instance, attribute, oip3):
instance.iip3 = oip3 - instance.gain
return oip3
@attr.s
class Block:
gain = attr.ib()
iip3 = attr.ib(on_setattr=set_oip3, default=np.inf)
oip3 = attr.ib(on_setattr=set_iip3, default=np.inf)
但是,这不起作用。我怀疑调用会set_oip3
导致调用 set iip3,而后者又调用 set oip3。
必须有使用 attrs 的解决方案。