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

Python 导入模块会导致TypeError:module.\uuuuu init\uuuuu()最多接受2个参数(给定3个),python,python-3.x,Python,Python 3.x,请不要标记为重复,其他类似的问题并没有解决我的问题 这是我的设置 /main.py /actions/ListitAction.py /actions/ViewAction.py Main.py: from actions import ListitAction, ViewAction ListAction.py: class ListitAction(object): def __init__(self): #some init behavior def

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

这是我的设置

/main.py
/actions/ListitAction.py
/actions/ViewAction.py
Main.py:

from actions import ListitAction, ViewAction
ListAction.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
我收到的唯一错误消息是:

回溯(最近一次呼叫最后一次):
文件“/home/jlevac/workspace/project/listit.py”,第11行,在
从操作导入ListAction、ViewAction、CommentsAction
文件“/home/jlevac/workspace/project/actions/ViewAction.py”,第3行,在
类ViewAction(ListAction):
TypeError:module.\uuuuu init\uuuuuu()最多接受2个参数(给定3个)
即使我尝试使用python3控制台,也会收到相同的错误消息:

$python3
from actions import ViewAction

我是Python新手,但对编程并不陌生。我假设我的错误消息与导入语句有关,但根据消息,我无法真正理解它的含义。

您正在传递
self
,而您不需要传递,仅此而已。

编辑:由于我不想窃取内容,请参见MSeifert的注释答案。

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

from actions import ListitAction
ViewAction.py中
应为:

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

from actions.ListitAction import ListitAction
from actions.ViewAction import ViewAction
因为导入的类来自
actions
包下的不同模块。

创建类和变量实例 为学生类创建两个实例变量 遗产
如果文件位于项目的根目录中,则可以直接写入文件名并导入

例如,如果文件名是
Parent1.py
,类名是
Parent
,那么您将编写

from Parent1 import Parent
但是,如果您的文件
Parent1.py
位于任何文件夹下,例如:

DemoFolder ->  Parent1.py- >    Parent
(Folder).       (File).      (Class name)
然后你必须写:

from Test.Parent1 import Parent

哪里在子类中?您是否定义了
\uuuu init\uuuu.py
文件,或者在python路径中包含了目录?如果您将所有内容都放在主文件中,该示例是否有效?@ShadowRanger的可能重复问题虽然“可能重复”问题的标题与此问题几乎相同,但在两个问题中抛出错误的原因是不同的(即,该问题的答案对我没有帮助,而此处接受的答案对我没有帮助)Python不能使用相对路径,因此它取决于
\uuuuu init\uuuuuuuuu.py
的设置方式。如果他将所有内容导入全局
操作
空间,它应该像OP那样工作。如果不是,你的答案是正确的。这是遵循命名约定的一个原因,即只有类名是大写的,模块名应该是小写的;更容易看到的是,您没有在您认为的位置导入类名。@MSeifert:OP得到的错误表明,他们没有在
\uuuu init\uuuuuuuuuuuuy.py
中巧妙地获得该行为;当你试图让一个类从一个模块继承时,这个错误消息正是你期望看到的。因此,文件不是一个特定的类,而是一个模块。明白了。我没有init.py设置,我不知道这一点。@levacjeep:我很惊讶它居然能工作;您至少需要一个空的
\uuuu init\uuu.py
,包才能正常工作。无论如何,是的,Java很奇怪,因为它只允许每个源文件定义一个(非嵌套)类。Python和大多数其他OO语言可以为每个模块定义许多类。考虑到您的用例(假设它不够复杂,不足以证明可以拆分为单独的源文件),您可能只需要创建一个
actions.py
文件并在其中定义这两个类,这样就省去了这些单独导入的麻烦。
from Parent1 import Parent
DemoFolder ->  Parent1.py- >    Parent
(Folder).       (File).      (Class name)
from Test.Parent1 import Parent