首页 > 解决方案 > 在继承的类中获取动态参数值 - django

问题描述

我在用paho mqtt

写了一堂课

 class initializer():
    def __init__(self):
        self.client = mqtt.Client(mqtt_server+str(int(time.time())))  
        self.client.username_pw_set(
            username=mqtt_username, password=mqtt_password)
        self.client.on_connect = self.on_connect
        self.client.on_subscribe = self.on_subscribe
        self.client.connect(broker, mqtt_port)
        self.client.loop_start()
    def on_connect(self, client, userdata, flags, rc):
        if rc == 0:
            #app_logger.info("Device Connection Established")
            print("Device Connection Established")
        else:
            #app_logger.info("Bad Connection")
            print("Bad Connection")
    def on_message(self, client, userdata, message):
        # app_logger.info(message.topic)
        print("message.topic", message.payload)

然后我将这个类继承到另一个类。

   class PublishData(initializer):

        def __init__(self):
            super(PublishData, self).__init__()
            self.client.on_message = self.on_message


        def on_message(self, client, userdata, message):
            print("message.payloa", message.payload)

        def begin(self, topic, data):
            self.client.on_message = self.on_message
            self.client.subscribe(
                "topic")
            self.client.publish(
                topic, str(data))
    publishData = PublishData()
    publishData.begin(topic, data)

on_message在类的函数中收到消息,initializer但在继承的类中没有收到该消息。我如何message.payload在课堂上获得价值PublishData

标签: pythondjangopaho

解决方案


class Class():

  def method(self, ...):
    ...

def function(..., ...)

method是一个对象的方法,function是一个独立的函数。这是不同的事情。

on_messagemqtt客户端期望回调的方法function,但不是method

正确的代码如下:

import paho.mqtt.client as mqtt

class init:

  def __init__(self):
  
    def _on_connect(client, userdata, flag, rc):
      print("on connect")

    self.client = mqtt.Client()

    self.client.on_connect = _on_connect


class Publish(init):

  def __init__(self):
    super().__init__()

    def _on_message(client, userdata, message):
      print("on message")

    self.client.on_message = _on_message

mqtt_obj = Publish()
mqtt_obj.client.on_connect(1,2,3,4)
mqtt_obj.client.on_message(1,2,3)

输出:

on connect
on message

推荐阅读