I have a general parent class
class Sensor():
def writeCarac(self,uuid,PAYLOAD=None):
pass
def OTAReset(self):
self.writeCarac(0x1234,[1,2,3,4])
and a child class
class sensortypeA(Sensor):
def writeCarac(self, uuid):
PAYLOAD = []
match uuid:
case uuid1:
PAYLOAD = [something]
case uuid2:
PAYLOAD = [something else]
return super().writeCarac(uuid, PAYLOAD)
writeCarac is overloaded in the child with a different prototype parameter list
If I have an instance of sensortypeA and I call writeCarac it works and I reach the child method. If I call OTAReset it calls the child method even though OTAReset is in the parent class.
I could try in OTAreset calling super but it makes no sense as it's already in the parent class.
I want to be able to call writeCarac inside the parent class but call the parent writeCarac method not the child one.
You could make sure to always call the method on the parent class:
class Sensor():
def writeCarac(self,uuid,PAYLOAD=None):
pass
def OTAReset(self):
Sensor.writeCarac(self, 0x1234, [1,2,3,4])
However, the signature for writeCarac should be identical on the parent and child classes. If you fix that then you can check if a non-default payload value has been passed and, only in that case, use the new defaults:
class SensorTypeA(Sensor):
def writeCarac(self, uuid, payload=None):
if payload is None:
payload = []
match uuid:
case uuid1:
payload = [something]
case uuid2:
PAYLOAD = [something else]
return super().writeCarac(uuid, payload)
Once you do that then your original OTAReset code should work.