Hallo zusammen,
in javascript lebt ein callback in seinem Object weiter und kann auch auf propertys in einer "Klasse" zugreifen.
Also weis die Callback in welcher Instanz sie sich befindet und kann so mit der Instanz interagieren.
Genau das klappt aber by python nicht, jedenfalls bei mir.
Wenn ich eine Funktion in meinem Objekt aufrufe via Callback und dann auf self.foo zugreife ist foo leider nicht bekannt.
Obwohl mir der Debugger im Breakpoint sagt, es sei
1. Das richtige Objekt
2. Der richtige Speicher
self = {<messaging.messageprocess.MessageProcess object at 0x76298630>}
import json
from messaging.model import MessageModel
class MessageProcess:
def __init__(self, process_dict):
process_dict['update_from_json'] = self.update_model_from_json
self.hardware_callback = None
self.websocket_callback = None
self.arduino_callback = None
self.message_model = MessageModel()
self.process_dict = process_dict
self.fetch_callbacks()
def fetch_callbacks(self):
hardware_callback_received = False
arduino_callback_received = False
websocket_callback_received = False
while not hardware_callback_received and not arduino_callback_received and not websocket_callback_received:
if "hardware_callback" in self.process_dict:
self.hardware_callback = self.process_dict["hardware_callback"]
hardware_callback_received = True
if "arduino_callback" in self.process_dict:
self.arduino_callback = self.process_dict["arduino_callback"]
arduino_callback_received = True
if "websocket_callback" in self.process_dict:
self.websocket_callback = self.process_dict["websocket_callback"]
websocket_callback_received = True
print("fetching complete")
def notify_update(self):
self.hardware_callback(self.message_model)
self.websocket_callback(self.message_model)
self.arduino_callback(self.message_model)
def update_model_from_json(self, json_obj):
value_object = json.loads(json_obj)
# engines
self.message_model.EngineEcho.EngineValue = value_object["Echo"]["EngineValue"]
self.message_model.EngineEcho.EngineStatus = value_object["Echo"]["EngineStatus"]
self.message_model.EngineNovember.EngineValue = value_object["November"]["EngineValue"]
self.message_model.EngineNovember.EngineStatus = value_object["November"]["EngineStatus"]
self.message_model.EngineSierra.EngineValue = value_object["Sierra"]["EngineValue"]
self.message_model.EngineSierra.EngineStatus = value_object["Sierra"]["EngineStatus"]
self.message_model.EngineWhiskey.EngineValue = value_object["Whiskey"]["EngineValue"]
self.message_model.EngineWhiskey.EngineStatus = value_object["Whiskey"]["EngineStatus"]
# hardware
self.message_model.Hardware.LED = value_object["Hardware"]["Led"]
# gyro
self.message_model.Gyro.pitch = value_object["Gyro"]["pitch"]
self.message_model.Gyro.roll = value_object["Gyro"]["roll"]
self.message_model.Gyro.yaw = value_object["Gyro"]["yaw"]
self.notify_update()
Alles anzeigen
Genau hier ist aber das Problem:
self.message_model ist kein attribute auf dem objekt, wenn ich aus einem Callback kommt.
Meine Frage ist daher, wie bekomme ich im Callback zugriff auf die property self.message_model.
Vielen Dank für die Hilfe!
LG
Ipad