覆盖 class 参数 Python

Overwritting class patametres Python

我想创建 class 用户声明一些属性和其他属性是根据先前声明的参数计算的。

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。我该如何解决这个问题来计算结果?

您不能有一个名为 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。

在你的例子中,你同时声明了 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