I want to create a class that is a type of graph, together with some additional information. As a simple example, let's say we want to create a class MyCayleyGraph
that, when initialized on a group and a set of generators, returns the Cayley DiGraph, but also has attributes storing the group and the generators used to make that Cayley graph. I've found a way of doing this, but I fear it's not the best, and I'd like to know if there is a preferred way.
My attempt:
class MyCayleyGraph():
def __init__(self, group, gens):
self._graph = group.cayley_graph(generators = gens)
self._group = group
self._gens = gens
def __getattr__(self, attr):
return getattr(self._graph, attr)
def group(self):
return self._group
def gens(self):
return self._gens
What I'm concerned about:
Ideally, I think this should be done by inheriting from the graph class, but I couldn't figure out how to make MyCayleyGraph
inherit from DiGraph
, and make the initialized graph actually be the Cayley graph of group and gens, rather than just an empty graph. What bothers me about the solution above is that I seem to be "sneakily" making a DiGraph object, because I can call DiGraph attributes on the resulting Cayley Graph, but the resulting object isn't actually of type DiGraph.
What's the correct way to do this?