__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(.. 的 kv 文件。将其注释掉也会使错误消失。

尝试做:

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 使用工厂,因此不清楚是什么导致了错误,但是该调用中缺少参数,并且 not 在您对 super().__init__.[=13= 的调用中]

您还应该在签名中包含 *args 并调用 super: factories 可以使用函数签名。