Je tente de sous-classer Graph
à partir du package graph_tool
pour une analyse graphique en Python (afin de générer certaines de mes propres fonctions, tout en utilisant les fonctions de Graph_Tool), et je ne semble pas utiliser les méthodes du générateur de graphes graph_tool
.Graphique de sous-classes du package graph_tool
Je commence par importer mes cours:
import graph_tool.all as gt
import numpy.random as np
np.seed(42)
J'ai essayé différentes versions de la méthode __init__
:
Construire un graphique à partir de zéro. Cela fonctionne, mais je préférerais ne pas l'utiliser, parce que
graph_tool
a quelques bonnes façons de pré-remplir vos graphiques (voir 2. et 3. ci-dessous).class myGraph(gt.Graph): def __init__(self): super(myGraph, self).__init__() self.add_vertex(4)
utilisation des méthodes de génération de graphique
graph_tool
. Cela génère un objetgt.Graph
à l'intérieur de la fonction. Mais quand j'essaie d'imprimer l'objet en dehors de la fonction, j'obtiens une erreur.class myGraph(gt.Graph): def __init__(self): self = gt.collection.data['celegansneural'] print self g = myGraph() print g
Les retours de code ci-dessus (notez la première ligne est le résultat de print self
dans mon `méthode init):
<Graph object, directed, with 297 vertices and 2359 edges at 0x1049d2a50>
Traceback (most recent call last): <br>
File "Graph_Tool.py", line 54, in <module> <br>
print g <br>
File "/usr/local/lib/python2.7/site-packages/graph_tool/__init__.py", line 1683, in __repr__ <br>
d = "directed" if self.is_directed() else "undirected" <br>
File "/usr/local/lib/python2.7/site-packages/graph_tool/__init__.py", line 2412, in is_directed <br>
return self.__graph.get_directed() <br>
AttributeError: 'myGraph' object has no attribute '_Graph__graph'
Mon autre approche consiste à appeler le parent
__init__
mais à remplacer l'objet par de nouvelles données. Quand je fais cela, tout va bien tant que je reste dans ma méthode__init__
, mais une fois que je le quitte, mon graphique est effacé.class myGraph(gt.Graph): def __init__(self): super(myGraph, self).__init__() self = gt.collection.data['celegansneural'] print self g = myGraph() print g
qui renvoie les éléments suivants. Notez les premiers print self
renvoie une population Graph
objet, tandis que le second print g
retourne un vide myGraph
objet
<Graph object, directed, with 297 vertices and 2359 edges at 0x11df610d0>
<myGraph object, directed, with 0 vertices and 0 edges at 0x109d14190>
je présenter des excuses à l'avance si cela est un problème difficile de graph_tool
, bibliothèque, mais je me suis dit qu'il est plus probable mon erreur de codage que la leur.
Attribution de 'self' ne change pas vraiment votre objet en aucune façon. 'self' est une variable locale ordinaire, et l'affectation de variable ne mute jamais des objets comme ça. Voir http://nedbatchelder.com/text/names.html – user2357112
Merci. Cela a du sens pourquoi 3. ne fonctionne pas. Je suis en train de réaffecter la variable locale "self" dans la méthode à l'objet, mais comme __init__ ne retourne pas "self", je n'ai pas vraiment modifié l'objet renvoyé par la méthode. – Tim