Python使用其他模块的方法

时间:2014-04-25 06:49:18

标签: python

我有两个名为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 ):

3 个答案:

答案 0 :(得分:1)

从Graph.py中删除您的类声明。从文件导入所有文件时,您将获得所有顶级对象。在这种情况下,它是Graph类本身,而不是它的方法。

您还需要传递字符串'testcase.txt'而不是testcase.txt

答案 1 :(得分:1)

这里有多个问题:

  1. 如果您from Graph import *(这是一个不好的做法),请将Graph带入您的名称空间。但是,ReadGraph Graph内的,因此要访问它,您需要Graph.ReadGraph
  2. 完成后,您尝试拨打Dfs.ProcessGraph(testcase.txt,verbose=True)。第一个参数被解释为"传递名称txt引用的对象的testcase属性,该属性不存在。相反,您的意思是"testcase.txt"(引用它使其成为字符串)。
  3. 完成所有这些后,你得到了TypeError: unbound method ProcessGraph() must be called with Dfs instance as first argument (got str instance instead)。当您调用实例方法时,第一个参数self按惯例,就是实例本身。你有两个选择; a)制作例如ProcessGraph @staticmethod,然后访问Graph.ReadGraph;或者b)将它移到课堂外,然后你就可以像在第一时间那样直接访问它。由于您似乎没有任何类或实例属性,因此您不清楚为什么要打扰这些类。
  4. 应该是什么样子:

    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)