0

我对从另一个文件导入方法有点困惑。

我正在编写一个从python-automata. 我已经下载了该文件,并在我的../Python/目录中DFA.py存储了该文件myfile.py

myfile.py我上面写了这个:

import DFA

当我按照python 教程中的内容进行操作时,我假设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)

我不确定为什么它说它需要 2 个参数,当DFA.py它定义为接受 5 个参数时。在DFA.py中,我看到:

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

这似乎是我之前遇到的类似错误(请参阅Python 导入问题Python 类和 __init__ 方法),但我认为我不需要在这里处理继承。

4

3 回答 3

5
from DFA import DFA

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

编辑:命名__xx__的方法并不意味着直接调用。

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

于 2012-10-08T16:45:52.597 回答
4

您正在DFA作为模块导入,但您想在其中导入。尝试:

from DFA import DFA

__init__然后,您可以通过调用类的构造函数来隐式调用DFA

DFA(states, alphabet, delta(states, alphabet), start, accepts)     
# ^ this calls __init__ on DFA
于 2012-10-08T16:45:55.047 回答
0

当您输入 时DFA.__init__(),您正在调用__init__整个模块的方法(我什至不知道它被定义为什么)。你应该使用DFA.DFA.__init__(),它指的是类中的__init__方法,或者使用:DFADFA.py

from DFA import *
DFA.__init__()
于 2012-10-08T16:45:57.117 回答