我有两个名为Dfs和Graph的模块。 在我的Graph模块中,我有一个Graph类和一个名为ReadGraph的方法。 在我的Dfs模块中,我有一个调用ReadGraph的方法但是当我输入时出现以下错误消息:Dfs.ProcessGraph(testcase.txt,verbose = True)
错误讯息: NameError:未定义名称'testcase'
有人可以解释如何解决这个问题吗?
感谢。
来自我的Dfs.py模块:
import sys
from Graph import *
class Dfs( object ):
def ProcessGraph(file_name, verbose):
g=ReadGraph(file_name)
从我的Graph.py模块:
class Graph( object ):
def ReadGraph( file_name ):
答案 0 :(得分:1)
从Graph.py中删除您的类声明。从文件导入所有文件时,您将获得所有顶级对象。在这种情况下,它是Graph
类本身,而不是它的方法。
您还需要传递字符串'testcase.txt'
而不是testcase.txt
。
答案 1 :(得分:1)
这里有多个问题:
from Graph import *
(这是一个不好的做法),请将Graph
带入您的名称空间。但是,ReadGraph
Graph
内的,因此要访问它,您需要Graph.ReadGraph
。 Dfs.ProcessGraph(testcase.txt,verbose=True)
。第一个参数被解释为"传递名称txt
引用的对象的testcase
属性,该属性不存在。相反,您的意思是"testcase.txt"
(引用它使其成为字符串)。TypeError: unbound method ProcessGraph() must be called with Dfs instance as first argument (got str instance instead)
。当您调用实例方法时,第一个参数self
按惯例,就是实例本身。你有两个选择; a)制作例如ProcessGraph
@staticmethod
,然后访问Graph.ReadGraph
;或者b)将它移到课堂外,然后你就可以像在第一时间那样直接访问它。由于您似乎没有任何类或实例属性,因此您不清楚为什么要打扰这些类。 应该是什么样子:
import sys
from Graph import read_graph
def process_graph(file_name, verbose):
g = read_graph(file_name)
Graph.py
模块(注意缺少class Graph
):
def read_graph(file_name):
...
(一般来说,我建议你阅读PEP 8)。
答案 2 :(得分:0)
您的代码应为:Dfs.ProcessGraph('testcase.txt',verbose=True)
而不是Dfs.ProcessGraph(testcase.txt,verbose=True)
'testcase.txt' # is a string and should be between quotes
还检查它是否在您的代码所在的同一目录中指向它
加上DF,你应该实例化Graph:
from Graph.Graph import *
g = Graph()
grf = g.ReadGraph('filename')
编辑:更准确
图模块中的:
class Graph(object):
def __init__(self):
pass # for the example now
def read_graph(self, file_name):
return file_name
在Dfs模块中:
from Graph import *
class Dfs(object):
def __init__(self):
pass # for the example now
def ProcessGraph(file_name, verbose):
g = Graph()
file_name = Graph.read_graph(file_name)