导入模块导致TypeError:module .__ init __()最多接受2个参数(给定3个)


问题内容

请不要将其标记为重复项,其他类似问题也不能解决我的问题。

这是我的设置

/main.py
/actions/ListitAction.py
/actions/ViewAction.py

Main.py:

from actions import ListitAction, ViewAction

ListitAction.py:

class ListitAction(object):

    def __init__(self):
        #some init behavior

    def build_uri():
        return "test.uri"

ViewAction.py

from actions import ListitAction

class ViewAction(ListitAction):

    def __init__(self, view_id):
        ListitAction.__init__(self)
        self.view_id = view_id

    def build_uri():
        return "test"

运行:

$ python3 main.py

我收到的唯一错误消息是:

Traceback (most recent call last):
  File "/home/jlevac/workspace/project/listit.py", line 11, in <module>
    from actions import ListitAction, ViewAction, CommentsAction
  File "/home/jlevac/workspace/project/actions/ViewAction.py", line 3, in <module>
    class ViewAction(ListitAction):
TypeError: module.__init__() takes at most 2 arguments (3 given)

即使我尝试使用python3控制台,也会收到相同的错误消息:

$python3
from actions import ViewAction

我是Python的新手,但不是编程的新手。我假设我的错误消息与import语句有关,但是基于该消息,我无法真正弄清楚它的含义。


问题答案:

您的导入错误,因此您尝试从模块本身继承,而不是从模块内部定义的类(名称相同)继承。

from actions import ListitAction

ViewAction.py应为:

from actions.ListitAction import ListitAction

同样,所有其他用途应切换为显式导入from actions.XXX import XXX(由于重复的名称),例如from actions import ListitAction, ViewAction必须变成两种导入:

from actions.ListitAction import ListitAction
from actions.ViewAction import ViewAction

因为要导入的类来自actions程序包下的不同模块。