[英]Python TypeError: 'int' object is not callable in OOP
I have a problem.我有个问题。 I learn of using
setters
in python.我了解到在
setters
中使用设置器。 I have some code down here and I try to use method measure_set
which doesn't work because I have a TypeError: 'int' object is not callable
.我在这里有一些代码,我尝试使用方法
measure_set
不起作用,因为我有一个TypeError: 'int' object is not callable
。 Can someon explain me why this is happens?有人可以解释一下为什么会这样吗? I tried to find solution but I didin't find a similar problem in OOP with using setters.
我试图找到解决方案,但我没有在 OOP 中使用 setter 找到类似的问题。 Thanks, and have a nice day.
感谢,并有一个愉快的一天。
class Sensor:
def __init__(self, location, _measurement = 0, _precision = float('inf'), _unit = 'N/A'):
self._measurement = _measurement
self._precision = _precision
self._unit = _unit
self.location = location
self.log = []
@property
def log_average(self):
return sum(self.log)/len(self.log)
@property
def measurement(self):
return self._measurement
@measurement.setter
def measure_set(self, measure):
self._measurement = measure
self.log.append(self._measurement)
@property
def description(self):
return f'{self._measurement} +/- {self._unit}'
if __name__ == '__main__':
s = Sensor('Ostatni Grosz')
print(s.description)
s.measure_set(10)
s.measure_set(20)
print(s.log)
print(s.log_average)
The name of the setter should match the name of the property.设置器的名称应与属性的名称匹配。
@measurement.setter
def measurement(self, measure):
self._measurement = measure
self.log.append(self._measurement)
because the property
instance returned by measurement.setter
is assigned to the name measurement
.因为
measurement.setter
返回的property
实例被赋予了名称measurement
。 With your code, you now have two separate properties, one (read-only) property named measurement
and one named measurement_set
.使用您的代码,您现在有两个单独的属性,一个(只读)属性名为
measurement_set
measurement
The setter isn't meant to be called directly (and can't, because the name no longer refers to a callable object, but to the property). setter 并不意味着直接调用(也不能,因为名称不再指代可调用的 object,而是指属性)。 When you write
self.measurement_set(10)
, the attribute access self.measurement_set
returns (via the getter) the current int
value of self._measurement
, then tries to call that with an argument of 10.当您编写
self.measurement_set(10)
时,属性访问self.measurement_set
返回(通过 getter) self._measurement
的当前int
值,然后尝试使用参数 10 调用它。
Instead, you just assign to the property directly, which triggers the invocation of the setter.相反,您只需直接分配给属性,这会触发 setter 的调用。
s.measurement = 10
s.measurement = 20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.