Python TypeError:在OOP中无法调用“ int”对象

时间:2019-10-25 16:19:49

标签: python class oop int setter

我有问题。我了解了在Python中使用setters的知识。我这里有一些代码,我尝试使用方法measure_set,因为我有一个TypeError: 'int' object is not callable,该方法不起作用。有人能解释一下为什么会这样吗?我试图找到解决方案,但是在使用setter的OOP中没有发现类似的问题。谢谢,祝你愉快。

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)

1 个答案:

答案 0 :(得分:1)

setter的名称应与属性的名称匹配。

@measurement.setter
def measurement(self, measure):
    self._measurement = measure
    self.log.append(self._measurement)

因为property返回的measurement.setter实例被分配了名称measurement。现在,有了代码,您将拥有两个单独的属性,一个名为measurement的(只读)属性,另一个名为measurement_set的属性。

setter不能直接调用(也不能,因为名称不再是可调用对象,而是属性)。当您编写self.measurement_set(10)时,属性访问权self.measurement_set返回(通过getter)int的当前self._measurement值,然后尝试使用参数10进行调用。 / p>

相反,您只是直接分配给属性,这将触发设置器的调用。

s.measurement = 10
s.measurement = 20