Python3 - TypeError:module .__ init __()最多需要2个参数(给定3个)

lev*_*eep 9 python python-3.x

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

这是我的设置

/main.py
/actions/ListitAction.py
/actions/ViewAction.py
Run Code Online (Sandbox Code Playgroud)

Main.py:

from actions import ListitAction, ViewAction
Run Code Online (Sandbox Code Playgroud)

ListitAction.py:

class ListitAction(object):    

    def __init__(self):        
        #some init behavior

    def build_uri():
        return "test.uri"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

运行:

$ python3 main.py
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

$python3
from actions import ViewAction
Run Code Online (Sandbox Code Playgroud)

我是Python新手,但不是编程新手.我假设我的错误消息与import语句有关,但根据消息,我无法弄清楚它的含义.

谢谢

Sha*_*ger 27

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

from actions import ListitAction
Run Code Online (Sandbox Code Playgroud)

in ViewAction.py应该是:

from actions.ListitAction import ListitAction
Run Code Online (Sandbox Code Playgroud)

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

from actions.ListitAction import ListitAction
from actions.ViewAction import ViewAction
Run Code Online (Sandbox Code Playgroud)

因为导入的类来自actions包下的不同模块.

  • 这是遵循命名约定的一个原因,即只有类名在CamelCase中,模块名称应为小写; 您可以更容易地看到您没有在您认为自己的位置导入类名. (2认同)