Zugriff auf dict von class aus gesehen
Verfasst: Freitag 16. Dezember 2022, 14:12
Hallo
Ich habe ein Main.py Programm. Dort wird ein Dict definiert. Das soll dann durch einen Rückgabewert einer class Funktion erweitert werden.
Ändere ich im ursprünglichen dict nur einen bestimmten Wert, dann sehe ich später in einer (anderen) class Funktion diese Änderung.
Ändere ich das ursprüngliche dict, indem ich einen ganzen Zweig austausche (gleiche Struktur, viele geänderte Werte), dann wir dies in einer class Funktion nicht sichtbar.
Dieses Austauschen sollte eben mit dem Rückgabewert (dict) aus einen bestimmten class Funktion geschehen.
Vielleicht kann man dieses Problem mit dem Beispiel erkennen.
Main.py
test_class.py
Für mich ist es etwas schwer zu beschreiben, hoffe aber doch, das das Beispiel helfen kann.
Wie kann ich das Problem der Dict-Erweiterung lösen?
Danke
Ich habe ein Main.py Programm. Dort wird ein Dict definiert. Das soll dann durch einen Rückgabewert einer class Funktion erweitert werden.
Ändere ich im ursprünglichen dict nur einen bestimmten Wert, dann sehe ich später in einer (anderen) class Funktion diese Änderung.
Ändere ich das ursprüngliche dict, indem ich einen ganzen Zweig austausche (gleiche Struktur, viele geänderte Werte), dann wir dies in einer class Funktion nicht sichtbar.
Dieses Austauschen sollte eben mit dem Rückgabewert (dict) aus einen bestimmten class Funktion geschehen.
Vielleicht kann man dieses Problem mit dem Beispiel erkennen.
Main.py
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from collections import defaultdict
import test_class as sensors
import copy
SENSOR_config_array=defaultdict(dict)
SENSOR_config_array["Sensors"]=defaultdict(dict)
SENSOR_config_array["Sensors"]["actualVal"]=3
SENSOR_config_array["Sensors"]["maxVal"]=10
A10_sensors_class = sensors.deal_with_sensorData(SENSOR_config_array)
print ("original SENSOR_config_array:")
print (SENSOR_config_array)
print()
ret=A10_sensors_class.make_DataString() ## return "maxVal" should change to 20
print ("1. ret :")
print (ret) ## OK
print()
SENSOR_config_array["Sensors"]["maxVal"]=20 ## "maxVal" set to 20
ret=A10_sensors_class.make_DataString() ## return "maxVal" should =40
print ("2. ret :")
print (ret) ## OK
SENSOR_config_array["Sensors"]=ret ## "maxVal" set to (returned)40
print ("2. SENSOR_config_array:")
print (SENSOR_config_array["Sensors"]) ## 40 !!! it seems to be updated!!!
print()
ret=A10_sensors_class.make_DataString() ## return "maxVal" should =80
print ("3. ret:")
print (ret) ## NO !!
print()
SENSOR_config_array["Sensors"]["Val"]=90
ret=A10_sensors_class.make_DataString2() ## return "maxVal" should =80
print ("4. ret:")
print (ret) ## NO !!
print()
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from collections import defaultdict
class deal_with_sensorData:
def __init__(self, config_data):
self.SensorData=defaultdict(set)
self.SensorData=config_data["Sensors"]
## config_data has e.g.
## config_data["Busses"]["type"]
## config_data["Sensors"]["actualVal"]
## config_data["Sensors"]["maxVal"]
def make_DataString(self):
temp=defaultdict(dict)
temp["maxVal"]=self.SensorData["maxVal"]*2
return temp
def make_DataString2(self):
temp=defaultdict(dict)
temp["Val"]=self.SensorData["Val"]*2
return temp
Wie kann ich das Problem der Dict-Erweiterung lösen?
Danke