ノードを使用してグラフを作成し、エッジを追跡するコードがあります。このコード自体は正常に動作しているように見えますが、reprオーバーライドを期待どおりに動作させることができません。いくつかのstr vs repoとrepr () が非文字列スレッドを返したのを読んだ後、私の悩みの原因を突き止めます。
!/usr/bin/python
class Edge:
def __init__(self, here, there, txt):
self.description = txt # why am i making this jump?
self.here = here # where do i start
self.there = there # where to i end
self.here.out += [self] # btw, tell here that they can go there
def __repr__(self):
return "E(" + self.here.name + " > " + self.there.name + ")"
class Node:
end = "."
start = "!"
def __init__(self, g, nid, name, stop=False, start=False):
self.nid = nid
self.graph = g # where do i live?
self.name = name # what is my name?
self.description = "" # tell me about myself
self.stop = stop # am i a stop node?
self.start = start # am i a start node?
self.out = [] # where do i connect to
def also(self, txt):
"""adds text to description"""
sep = "\n" if self.description else ""
self.description += sep + txt
def __repr__(self):
y = "N( :id " + self.nid + \
"\n :name " + self.name + \
"\n :about '" + self.description + "'" + \
"\n :out " + ",".join(str(n) for n in self.out) + " )"
class Graph:
def __init__(self):
self.nodes = [] # nodes, stored in creation order
self.keys = {} # nodes indexed by name
self.m = None # adjacency matrix
self.mPrime = None # transitive closure matrix
def __repr__(self):
return "\n".join(str(u) for u in self.nodes)
def node(self, name):
"""returns a old node from cache or a new node"""
if not name in self.keys:
self.keys[name] = self.newNode(name)
return self.keys[name]
def newNode(self, name):
""" create a new node"""
nid = len(self.nodes)
tmp = Node(self, nid, name)
tmp.start = Node.start in name
tmp.end = Node.end in name
self.nodes += [tmp]
return tmp
その関数が文字列ハンドラーによって呼び出されるたびに、 reprが文字列を返すことは私の理解です。より具体的には、インスタンスを文字列として参照し、 strを探し、strがreprを指し、呼び出し元のメソッドに文字列として返されます。私のプログラムでは、問題なく作成されたグラフがありますが、印刷すると、結合するリストを連結してスタックし、文字列ではなくintとして返しますか?
適切に機能するために文字列を明示的にキャストする必要があったため、reprが呼び出されていない可能性があると考えて、さまざまな部分を文字列としてキャストしようとしました。私の話の短所は、私のreprが "\n".join() によって適切に処理されておらず、何らかの形で から int 値を取得して",".join(str(n) for n in self.out)
おり、str と int を連結できないことを示しています。
私は本当に途方に暮れています.reprの使用に関する多くのGoogleの回答とテキスト、およびここでの多くの回答を読みましたが、ここで見落としているものを正確に理解していません.
グラフ自体は次のように作成されます。最初の行はノード名で、exit は > で始まり、その間のすべてがノードの場所の説明です。
グラフは私が編集することになっているものでprint graph("mystageText.txt")
あり、. したがって、インスタンスのリストを使用したreprの明確で簡潔な例が利用できないように見えるため、私はこの問題についてかなり混乱しています。repr(graph("myStageText.txt")
助けてくれてありがとう、うまくいけば、これはStackOverflowにとって十分に簡潔です。私の問題について徹底的に説明しようとしたときに、少し言葉が多すぎた場合は申し訳ありません。