Python类中类方法返回布尔值无法赋值给类属性问题排查
问题
定义了如下Sensor类,尝试在__init__方法中将类方法tolerance_check返回的布尔值赋值给实例属性tolerance_exceeded,但调试时发现该属性并未得到布尔值,而是输出绑定方法对象。此前用类似方式从API赋值字符串正常,代码运行在Azure Function中,请问问题出在哪?
代码示例:
class Sensor: def __init__(self, json_data): self.sensor_eui = json_data['end_device_ids']['dev_eui'] self.reading1 = json_data['uplink_message']['decoded_payload']['temperature'] self.reading2 = json_data['uplink_message']['decoded_payload']['humidity'] self.tolerance_exceeded = self.tolerance_check def tolerance_check(self): sql = f"SELECT DefaultLowerLimit, DefaultUpperLimit FROM [dbo].[IoT_Sensors] WHERE DeviceID = '{self.sensor_eui}'" results = exec_sql(sql) if (self.reading1 > int(results[0])) and (self.reading1 < int(results[1])): return False return True
调试日志输出:
[2022-10-26T12:08:08.025Z] Tolerance Exceeded: <bound method Sensor.tolerance_check of <app.IoT_Data-Handler.classes.Sensor object at 0x000001C834D45BE0>>
解决方法
问题出在你没有调用tolerance_check方法,只是把方法本身的绑定对象赋值给了tolerance_exceeded属性。在Python中,直接写self.tolerance_check会返回方法对象,只有加上括号()才会执行方法并获取返回值。
修改__init__中的赋值代码即可:
self.tolerance_exceeded = self.tolerance_check()
你之前从API赋值字符串正常,是因为那时候赋值的是已经计算好的变量/值,而这里是需要执行的方法,必须通过()触发执行才能拿到返回的布尔值。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

