1
"picklesで始まる"スクリプトを作成しようとしています。私はファイルからpickleファイルを保存して読み込みました。しかし、pickleファイルを1つのファイル(この場合はmain.py
)に保存して別のファイルからロードすると、エラーが発生します。私はおそらく何か小さいものを見逃していたが、何が分からないのか。pickleファイルを読み込む
main.py
import pickle
class Node:
"""This class represents a node"""
def __init__(self, value = None):
self.val = value
def toString(self):
return self.val
class Link:
"""This class represents a link between 2 nodes"""
def __init__(self, sourceNode, targetNode, LinkWigth):
self.source = sourceNode
self.target = targetNode
self.wight = LinkWigth
def setWeight(self, newWeight):
self.wight = newWeight
def toString(self):
return self.wight
class Graph:
"""This class represents a graph"""
def __init__(self):
self.nodes = []
self.links = []
def addNode(self, node):
self.nodes.append(node)
def addLink(self, link):
self.links.append(link)
def getInDegree(self, node):
counter = 0
for link in self.links:
if link.target == node:
counter +=1
else:
print "target is: %s" % link.target.toString()
print "source is: %s" % link.source.toString()
return counter
def toString(self):
for link in self.links:
print link.toString()
for node in self.nodes:
print node.toString()
if __name__ == "__main__":
n1 = Node(4)
l1 = Link(n1, n1, 1)
g = Graph()
g.addNode(n1)
g.addLink(l1)
pickle.dump(g, open('haha', 'wb'))
pickleLoader.py
import pickle
import main
n = main.Node(44)
print n.toString()
g = pickle.load(open('haha', 'rb'))
print "ha"
エラー
C:\Users\R\Desktop\pickle test>main.py
C:\Users\R\Desktop\pickle test>pickleLoader.py
44
Traceback (most recent call last):
File "C:\Users\R\Desktop\pickle test\pickleLoader.py", line 7, in <module>
g = pickle.load(open('haha', 'rb'))
File "C:\Program Files\Python27\lib\pickle.py", line 1378, in load
return Unpickler(file).load()
File "C:\Program Files\Python27\lib\pickle.py", line 858, in load
dispatch[key](self)
File "C:\Program Files\Python27\lib\pickle.py", line 1069, in load_inst
klass = self.find_class(module, name)
File "C:\Program Files\Python27\lib\pickle.py", line 1126, in find_class
klass = getattr(mod, name)
AttributeError: 'module' object has no attribute 'Graph'
C:\Users\R\Desktop\pickle test>
私はmain.py
がインポートされているため、問題は、名前空間で何かあると思いますが、私はそれを働かせる方法がない。
ありがとうございます。しかし、なぜこれらの3つのコンポーネントを別のモジュールに移動する方が良いでしょうか?それは何が変わるでしょうか? –
これらを別のモジュールに配置し(そしてそのモジュールをインポートすること)、名前空間の衝突を避けるのに役立ちます。現在のアプローチでは、型を現在の名前空間に持ち込む必要があります。それらを別のモジュールに配置してインポートすると、それらを自分の名前空間に保持します。 – DRH