Gram z wykresami i koduję moduł mixin do tworzenia wykresów. Chcę mieć w nim kilka alternatywnych konstruktorów. To jest to, co mam:Alternatywne konstruktory w Pythonie
class Graph(GraphDegree, GraphDegreePlot, GraphGeneration, object):
def __init__(self):
self.nodes = set([])
self.edges = {}
def get_nodes(self):
"""
get nodes in graph
"""
return self.nodes
def get_number_of_nodes(self):
"""
get number of nodes in the graph
"""
return len(self.nodes)
def get_edges(self):
"""
get edges in graph
"""
return self.edges
def get_heads_in_edges(self):
"""
get heads in edges present on the graph
"""
return self.edges.values()
def add_node(self, node):
"""
add new node to graph
"""
if node in self.get_nodes():
raise ValueError('Duplicate Node')
else:
self.nodes.add(node)
self.edges[node] = []
def add_connection(self, edge):
"""
adds edge to graph
"""
origin = edge.get_origin()
destination = edge.get_destination()
if origin not in self.get_nodes() or destination not in self.get_nodes():
raise ValueError('Nodes need to be in the graph')
self.get_edges()[origin].append(destination)
self.get_edges()[destination].append(origin)
def get_children(self, node):
"""
Returns the list of nodes node node is connected to
"""
return self.get_edges()[node]
class GraphGeneration(object):
@classmethod
def gen_graph_from_text(cls, file):
'''
Generate a graph from a txt. Each line of the txt begins with the source node and then the destination nodes follow
'''
cls.__init__()
file = open(file, 'r')
for line in file:
origin = line[0]
destinations = line[1:-1]
cls.add_node(origin)
for destination in destinations:
cls.add_node(destination)
edge = Edge(origin, destination)
cls.add_connection(edge)
graph = Graph.gen_graph_from_text(file)
Chcę, aby powrócić wykres gdzie węzły i krawędzie są generowane z pliku. Metoda, którą napisałem, nie działa, nie wiem, czy to ma sens. Wewnątrz tej metody chcę użyć metody Graph, ale następnie dodać krawędzie i węzły z pliku. Mogę po prostu napisać metodę na poziomie instancji, aby to zrobić, ale mam na myśli inne alternatywne inicjatory.
Dzięki!
Twój 'klasa GraphGeneration' dziedziczy tylko z Object, więc jego CLS .__' startowych __() 'nie ma żadnej z tych rzeczy milimetrowym jesteś definiującej. Każdy powód, dla którego nie można po prostu wykonać tej funkcji? –
Mam również inne konstruktory, które chcę, jak tworzenie wykresu m węzłów, a następnie łączenie ich na podstawie prawdopodobieństw. Jak powiedziałeś, mogłem wdrożyć wszystkie te metody instancji, po prostu pomyślałem, że fajnie byłoby mieć je w konstruktorze i mogłem nauczyć się w tym samym czasie, jak wykonywać alternatywne konstruktory w Pythonie. – FranGoitia