i have a subclass inherited from a parent class in the way below –
<code>class UPetriNet(PetriNet):
class UPlace(PetriNet.Place):
def __init__(self, inverse_map=None, preset=None, postset=None, label=None, **kw):
PetriNet.Place.__init__(self, **kw)
self._inverse_map = deque() if inverse_map is None else inverse_map
self._preset: Set[UPetriNet.UTransition] = set() if preset is None else preset
self._postset: Set[UPetriNet.UTransition] = set() if postset is None else postset
self._label = label if label else None
@classmethod
def from_pm4py(cls, p: PetriNet.Place):
return cls(in_arcs=p.in_arcs, out_arcs=p.out_arcs, name=p.name)
@property
def inverse_map(self):
return self._inverse_map
@inverse_map.setter
def inverse_map(self, value):
self._inverse_map = value
@property
def preset(self):
pre = set()
for arc in self.in_arcs:
pre.add(arc.source)
return pre
@preset.setter
def preset(self, value):
self._preset = value
@property
def postset(self):
post = set()
for arc in self.out_arcs:
post.add(arc.target)
return post
@postset.setter
def postset(self, value):
self._postset = value
@property
def label(self):
return self._label
@label.setter
def label(self, value):
self._label = value
def __eq__(self, other):
return self.name == other.name
def __hash__(self):
return id(self)
</code>
<code>class UPetriNet(PetriNet):
class UPlace(PetriNet.Place):
def __init__(self, inverse_map=None, preset=None, postset=None, label=None, **kw):
PetriNet.Place.__init__(self, **kw)
self._inverse_map = deque() if inverse_map is None else inverse_map
self._preset: Set[UPetriNet.UTransition] = set() if preset is None else preset
self._postset: Set[UPetriNet.UTransition] = set() if postset is None else postset
self._label = label if label else None
@classmethod
def from_pm4py(cls, p: PetriNet.Place):
return cls(in_arcs=p.in_arcs, out_arcs=p.out_arcs, name=p.name)
@property
def inverse_map(self):
return self._inverse_map
@inverse_map.setter
def inverse_map(self, value):
self._inverse_map = value
@property
def preset(self):
pre = set()
for arc in self.in_arcs:
pre.add(arc.source)
return pre
@preset.setter
def preset(self, value):
self._preset = value
@property
def postset(self):
post = set()
for arc in self.out_arcs:
post.add(arc.target)
return post
@postset.setter
def postset(self, value):
self._postset = value
@property
def label(self):
return self._label
@label.setter
def label(self, value):
self._label = value
def __eq__(self, other):
return self.name == other.name
def __hash__(self):
return id(self)
</code>
class UPetriNet(PetriNet):
class UPlace(PetriNet.Place):
def __init__(self, inverse_map=None, preset=None, postset=None, label=None, **kw):
PetriNet.Place.__init__(self, **kw)
self._inverse_map = deque() if inverse_map is None else inverse_map
self._preset: Set[UPetriNet.UTransition] = set() if preset is None else preset
self._postset: Set[UPetriNet.UTransition] = set() if postset is None else postset
self._label = label if label else None
@classmethod
def from_pm4py(cls, p: PetriNet.Place):
return cls(in_arcs=p.in_arcs, out_arcs=p.out_arcs, name=p.name)
@property
def inverse_map(self):
return self._inverse_map
@inverse_map.setter
def inverse_map(self, value):
self._inverse_map = value
@property
def preset(self):
pre = set()
for arc in self.in_arcs:
pre.add(arc.source)
return pre
@preset.setter
def preset(self, value):
self._preset = value
@property
def postset(self):
post = set()
for arc in self.out_arcs:
post.add(arc.target)
return post
@postset.setter
def postset(self, value):
self._postset = value
@property
def label(self):
return self._label
@label.setter
def label(self, value):
self._label = value
def __eq__(self, other):
return self.name == other.name
def __hash__(self):
return id(self)
while calling this UPlace
object somewhere in my code, I’m getting the RecursionError –
<code> File ".../obj/petrinet.py", line 80, in preset
pre.add(arc.source)
RecursionError: maximum recursion depth exceeded
</code>
<code> File ".../obj/petrinet.py", line 80, in preset
pre.add(arc.source)
RecursionError: maximum recursion depth exceeded
</code>
File ".../obj/petrinet.py", line 80, in preset
pre.add(arc.source)
RecursionError: maximum recursion depth exceeded
What could be wrong?
Also, is this a bad design pattern to inherit and add additional attributes? Are there any suggestions?
Thanks in advance.