Python - 在类中创建依赖关系

问题描述 投票:0回答:1

我有一个名为 RiskViewer 的类,它具有许多属性。我想创建对象方法,例如 compute_price()compute_risk() ,当对象属性之一发生更改时,它们会自动被调用,即在类中创建依赖关系链结构。这在 Python 中可能吗?

Class RiskViewer
    def __init__ (self,
                 currency: str,
                 index: str,
                 tenor: str,
                 group: str)
                 
    @property
    def currency(self):
        return self._currency

    @currency.setter
    def currency(self, ccy: str):
        self._currency = ccy

    etc ....             
    
    def compute_risk():
        pass
    
    def compute_price()
        pass
python python-3.x
1个回答
0
投票

看看这是否有效 -

class RiskViewer:
    def __init__(self, currency: str, index: str, tenor: str, group: str):
        self._currency = currency
        self._index = index
        self._tenor = tenor
        self._group = group

        # Compute initial values
        self.compute_price()
        self.compute_risk()

    @property
    def currency(self):
        return self._currency

    @currency.setter
    def currency(self, ccy: str):
        self._currency = ccy
        self._on_property_change()

    @property
    def index(self):
        return self._index

    @index.setter
    def index(self, idx: str):
        self._index = idx
        self._on_property_change()

    @property
    def tenor(self):
        return self._tenor

    @tenor.setter
    def tenor(self, tnr: str):
        self._tenor = tnr
        self._on_property_change()

    @property
    def group(self):
        return self._group

    @group.setter
    def group(self, grp: str):
        self._group = grp
        self._on_property_change()

    def _on_property_change(self):
        self.compute_price()
        self.compute_risk()

    def compute_risk(self):
        # Add logic to compute risk
        print("Computing risk...")

    def compute_price(self):
        # Add logic to compute price
        print("Computing price...")

# Example usage
rv = RiskViewer(currency="USD", index="SP500", tenor="1Y", group="Equities")
rv.currency = "EUR"  # This will automatically call compute_price() and compute_risk()
rv.index = "NASDAQ"
© www.soinside.com 2019 - 2024. All rights reserved.