__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 可以使用函数签名。
我在 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 可以使用函数签名。