繁体   English   中英

Python TypeError: 'int' object 在 OOP 中不可调用

[英]Python TypeError: 'int' object is not callable in OOP

我有个问题。 我了解到在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)

设置器的名称应与属性的名称匹配。

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

因为measurement.setter返回的property实例被赋予了名称measurement 使用您的代码,您现在有两个单独的属性,一个(只读)属性名为measurement_set measurement

setter 并不意味着直接调用(也不能,因为名称不再指代可调用的 object,而是指属性)。 当您编写self.measurement_set(10)时,属性访问self.measurement_set返回(通过 getter) self._measurement的当前int值,然后尝试使用参数 10 调用它。

相反,您只需直接分配给属性,这会触发 setter 的调用。

s.measurement = 10
s.measurement = 20 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM