You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:25:22