Python TypeError: 'int' object is not callable in OOP
Python TypeError: 'int' object is not callable in OOP
我有问题。我学会了在 python 中使用 setters
。我这里有一些代码,我尝试使用方法 measure_set
,但它不起作用,因为我有一个 TypeError: 'int' object is not callable
。有人能解释一下为什么会这样吗?我试图找到解决方案,但我没有在 OOP 中发现使用 setter 的类似问题。谢谢,祝你有愉快的一天。
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)
setter 的名称应与 属性 的名称匹配。
@measurement.setter
def measurement(self, measure):
self._measurement = measure
self.log.append(self._measurement)
因为 measurement.setter
返回的 property
实例被分配给名称 measurement
。使用您的代码,您现在有两个单独的属性,一个(只读)属性 名为 measurement
和一个名为 measurement_set
.
setter 不能直接调用(也不能,因为名称不再指代可调用对象,而是指 属性)。当您写入 self.measurement_set(10)
时,属性访问 self.measurement_set
returns(通过 getter)当前 int
的值 self._measurement
,然后尝试调用参数为 10.
相反,您只需直接分配给 属性,这会触发 setter.
的调用
s.measurement = 10
s.measurement = 20
我有问题。我学会了在 python 中使用 setters
。我这里有一些代码,我尝试使用方法 measure_set
,但它不起作用,因为我有一个 TypeError: 'int' object is not callable
。有人能解释一下为什么会这样吗?我试图找到解决方案,但我没有在 OOP 中发现使用 setter 的类似问题。谢谢,祝你有愉快的一天。
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)
setter 的名称应与 属性 的名称匹配。
@measurement.setter
def measurement(self, measure):
self._measurement = measure
self.log.append(self._measurement)
因为 measurement.setter
返回的 property
实例被分配给名称 measurement
。使用您的代码,您现在有两个单独的属性,一个(只读)属性 名为 measurement
和一个名为 measurement_set
.
setter 不能直接调用(也不能,因为名称不再指代可调用对象,而是指 属性)。当您写入 self.measurement_set(10)
时,属性访问 self.measurement_set
returns(通过 getter)当前 int
的值 self._measurement
,然后尝试调用参数为 10.
相反,您只需直接分配给 属性,这会触发 setter.
的调用s.measurement = 10
s.measurement = 20