覆盖 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。
在你的例子中,你同时声明了 member
和 property
他们中的任何一个都可以工作。
在您的情况下,如果您想要以前的结果,请使用此代码
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
我想创建 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。
在你的例子中,你同时声明了 member
和 property
他们中的任何一个都可以工作。
在您的情况下,如果您想要以前的结果,请使用此代码
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