【问题标题】:Overwritting class patametres Python覆盖类参数Python
【发布时间】:2022-01-18 07:43:06
【问题描述】:

我想创建一个类,其中用户声明一些属性,而其他属性是根据先前声明的参数计算的。

class Sum:
def __init__(self, a, b):
    self.a = a
    self.b = b
    self.result = None

@property 
def result(self):
    if self.result is None:
        self.result = self.a + self.b
    return self.result

当我声明 a 和 b 时,结果仍然是 None。如何解决这个问题来计算结果?

【问题讨论】:

    标签: python-3.x oop python-class


    【解决方案1】:

    就您而言,您同时声明了memberproperty 他们中的任何一个都可以工作。 在您的情况下,如果您想要以前的结果,请使用此代码

    class Sum:
        def __init__(self, a, b):
            self.a = a
            self.b = b
            self.output = None
    
        @property
        def result(self):
            if self.output is None:
                self.output = self.a + self.b
            return self.output
    
    
    sum = Sum(1, 2)
    print(sum.result)
    sum.a = 3
    print(sum.result)
    

    将打印

    3
    3
    

    或者如果你不想要以前的记录只想要result 然后使用这个代码

    class Sum:
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        @property
        def result(self):
            return self.a + self.b
    
    
    sum = Sum(1, 2)
    print(sum.result)
    sum.a = 3
    print(sum.result)
    
    

    将打印

    3
    5
    

    【讨论】:

    • 感谢您的帮助。我现在发现我的代码是正确的。我的错误在于缩进 - 所有属性和设置器都在“内部” init 所以我的函数不能正常工作。
    【解决方案2】:

    您不能拥有名为 result 的成员和名为 result 的属性。在这种情况下,您可能不想缓存结果。你只想:

    class Sum:
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        @property
        def result(self):
            return self.a + self.b
    
    s = Sum(3,4)
    s.a = 4
    print(s.result)
    

    将打印 8。

    【讨论】:

    • 我非常想存储我的结果以供进一步计算。上面的代码只是我的问题的一个简单示例。在我正在研究的实际项目中 - 抵押贷款计算器。其中一个参数是首期付款日期和持续时间(以月为单位),所以我想用一些日期数学推导出最后一期付款日期,并将此值存储在实例的属性中。
    • 易于计算的值不应存储在成员变量中。如果您这样做,那么当您更改输入值时,它们将不会被重新计算。缓存计算值只有在计算成本高昂的情况下才是一种胜利。
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 2018-02-11
    • 2022-11-03
    • 2020-06-16
    • 1970-01-01
    • 2019-08-17
    • 2017-07-12
    • 2015-01-12
    相关资源
    最近更新 更多