I have a class Device
which has two children: SmartSwitch
and Refrigerator
.
My problem is that SmartSwitch has attributes that I assigned to Refrigerator, which shouldn't happen.
Here's how I'm printing out the output:
device_dict = {}
device_dict["Kitchen Fridge"] = Refrigerator("Kitchen Fridge", 2)
device_dict["Water Heater Switch"] = SmartSwitch("Water Heater Switch")
for device_name2 in device_dict:
print("{}:\n{}\n-----\n".format(device_name2, device_dict[device_name2].get_data()))
Here's the output:
Kitchen Fridge:
{'Name': 'Water Heater Switch', 'State': 'off', 'temp': 2, 'Type': 'Smart Switch'}
-----
Water Heater Switch:
{'Name': 'Water Heater Switch', 'State': 'off', 'temp': 2, 'Type': 'Smart Switch'}
-----
Water Heater Switch is completely overriding Refrigerator's data.
Here's the code for the classes I'm using:
Device:
class Device:
data = {"Name": None, "State": "off"}
def __init__(self, name, state=None):
self.data["Name"] = name
if state is not None:
self.data["State"] = state
super().__init__()
def get_data(self):
return self.data
def set_name(self, name):
self.data["Name"] = name
return self.get_data()
def set_state(self, state):
self.data["State"] = state
return self.get_data()
SmartSwitch:
from Device import Device as Parent, Device
class SmartSwitch(Device):
def __init__(self, name):
super().__init__(name)
self.data["Type"] = "Smart Switch"
Refrigerator:
from Device import Device
class Refrigerator(Device):
def __init__(self, name, temp=None):
super().__init__(name)
if temp is not None:
self.data["temp"] = temp
self.data["Type"] = "Refrigerator"
def set_temperature(self, temp):
self.data["temp"] = int(temp)
return self.get_data()