导入模块导致 TypeError: module.__init__() takes at most 2 arguments (3 given)

新手上路,请多包涵

请不要标记为重复,其他类似问题没有解决我的问题。

这是我的设置

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

主.py:

 from actions import ListitAction, ViewAction

列表动作.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 新手,但不是编程新手。我假设我的错误消息与导入语句有关,但根据消息我无法真正弄清楚它的含义。

原文由 levacjeep 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 967
2 个回答

您的导入是错误的,因此您试图从模块本身继承,而不是从其中定义的类(同名)继承。

 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 包下的不同模块。

原文由 ShadowRanger 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你的文件在项目的根目录下那么直接写文件名导入即可。

例如,如果文件名是 Parent1.py 类名是 Parent ,那么你会写

from Parent1 import Parent

但是,如果您的文件 Parent1.py 在任何文件夹下,例如:

 DemoFolder ->  Parent1.py- >    Parent
(Folder).       (File).      (Class name)

那么你将不得不写:

 from Test.Parent1 import Parent

原文由 Divesh singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题