繁体   English   中英

__init__ 方法缺少位置参数,即使它已明确传递

[英]__init__ method missing positional argument even though it is clearly passed

我在 kivy 中有一个自定义小部件PlaylistView ,它应该将另一个自定义小部件作为其init方法的参数:

class PlaylistView(Widget):
    def __init__(self, node, **kwargs):  # (originally:) node: GridNode,...  (custom node, removed for min. reproducable exmple but still yields the same error)
        super().__init__(**kwargs)
        self.node = node
        ...

但是每当我尝试创建它的实例时,例如: PlaylistView(1)PlaylistView(GridNode('test'))PlaylistView("test") (无论我作为参数传递什么),我都会收到以下错误:

 Traceback (most recent call last):
   File "C:/Users/Maximilian.Wolf/PycharmProjects/MiaudioPyler/main.py", line 215, in <module>
     PlaylistView("test")
   File "C:/Users/Maximilian.Wolf/PycharmProjects/MiaudioPyler/main.py", line 157, in __init__
     super().__init__(**kwargs)
   File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\uix\widget.py", line 359, in __init__
     self.apply_class_lang_rules(
   File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\uix\widget.py", line 463, in apply_class_lang_rules
     Builder.apply(
   File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py", line 541, in apply
     self._apply_rule(
   File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py", line 663, in _apply_rule
     self._apply_rule(
   File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py", line 659, in _apply_rule
     child = cls(__no_builder=True)
 TypeError: __init__() missing 1 required positional argument: 'node'

我还尝试在 init 中使用node=None ,结果相同。

这可能与 kivy 或我如何调用super().__init__吗?
编辑
我单独尝试了这个,它有效,仍然不知道是什么导致了错误。

from kivy.uix.widget import Widget

class PlaylistView(Widget):
    def __init__(self, node, **kwargs):
        super().__init__(**kwargs)
        self.node = node

PlaylistView(1)

编辑 2更多信息:我在示例中所做和未显示的是使用Builder.load_file(..

编辑:看起来不导入可能导致错误

看起来 super 可能缺少所需的位置参数,因为在调用 super 时错误发生在第 157 行。 Here's the documentation for the widget class: https://kivy.org/doc/stable/api-kivy.uix.widget.html As seen by this post it doesn't look like Widget requires node as an argument: https:/ /stackoverflow.com/a/51012327/13297560

我会尝试的一件事是做 PlaylistView(node="test"),但这可能会也可能不会。

尝试做:

def __init__(self, node): 
        super(Widget, self).__init__()

回溯必须从上到下读取。 错误是文件“C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py”,第 659 行。

child = cls(__no_builder=True)

正在触发错误。 由于 kivy 使用工厂,因此不清楚是什么导致了错误,但该调用中缺少参数,而不是您对super().__init__的调用。

您还应该在签名中包含*args并调用 super:工厂可以使用 function 签名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM