2012-10-08 45 views
0

我对从另一个文件导入方法有点困惑。Python,导入文件中的init方法

我在写一个从python-automata导入的Python脚本。我已经下载了该文件,并在我的../Python/目录中存储了DFA.pymyfile.py

myfile.py我这个写在上面:

import DFA 

正如我下面什么写在python tutorial,我认为在myfile.py我可以使用DFA.py定义的任何方法。该文件有一个名为__init__的方法,该方法需要5个参数并初始化DFA。然后,我写这篇文章myfile.py

DFA.__init__(states, alphabet, delta(states, alphabet), start, accepts)  

凡州,字母,三角洲,启动和接受都是基本的清单/我在myfile.py已经初始化功能。

但是当我尝试运行myfile.py,我得到这个错误:

Traceback (most recent call last): 
    File "myfile.py", line 21, in <module> 
    DFA.__init__(states, alphabet, delta(states, alphabet), start, accepts) 
TypeError: module.__init__() takes at most 2 arguments (5 given) 

我不知道为什么它说,它需要两个参数,当DFA.py其定义为以在5个参数。在DFA.py,我看到:

class DFA: 
    def __init__(self, states, alphabet, delta, start, accepts): 
    ... 

好像我之前遇到过类似的错误(见Python import issuePython classes and __init__ method),但我不认为我需要在这里解决继承。

回答

4
from DFA import DFA 

a = DFA(states, alphabet, delta(states, alphabet), start, accepts) 

编辑:名为__xx__的方法不打算直接调用。

一些阅读:http://docs.python.org/tutorial/classes.html

+0

谢谢!这很好用!和+1给我额外的链接来阅读。 – TakeS

3

你导入DFA作为一个模块,而是要导入的类中它来代替。尝试:

DFA(states, alphabet, delta(states, alphabet), start, accepts)  
#^this calls __init__ on DFA 
0

当你把DFA.__init__(),你调用整个模块__init__方法(I:

from DFA import DFA 

然后,您可以隐式调用您DFA类的构造函数调用__init__甚至不知道那是什么定义)。您应该使用DFA.DFA.__init__(),它指的是DFA类的__init__方法中DFA.py,或使用:

from DFA import * 
DFA.__init__()