【发布时间】:2021-12-24 08:50:45
【问题描述】:
我对编程很陌生,如果这里的解决方案很明显,请原谅我。我已经进行了相当多的谷歌搜索,但无法解决这个问题。 我正在尝试使子类能够接受基类可以接受的任何关键字参数,以及我想传递的一些附加参数,但我一直遇到以下错误:TypeError: object.init() 只接受一个参数(要初始化的实例)。
如果我注释掉未内置在基类中的关键字参数(workout_title、last_completed 和 lifts),代码运行没有问题。
我如何让子类接受我的额外 kwargs?
class SelectionBanner(GridLayout):
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
grid = GridLayout(
rows = 3,
size_hint = (.8,1)
)
workout_title_label = Label(
size_hint = (1,.33),
pos_hint = {"top": 1, "left": .5},
text = "workout tile"
)
last_completed_label = Label(
size_hint = (1,.33),
pos_hint = {"top": 1, "left": .5},
text = "last_completed"
)
lifts_label = Label(
size_hint = (1,.33),
pos_hint = {"top": 1, "left": .5},
text = "lifts"
)
button = Button(
size_hint = (.2, 1),
text = "Click me!"
)
grid.add_widget(workout_title_label)
grid.add_widget(last_completed_label)
grid.add_widget(lifts_label)
self.add_widget(grid)
self.add_widget(button)
def build_selection_page(self):
data = db.reference("/workout_templates").get()
selection_page = self.root.ids['home_screen'].ids['top_layout']
selection_page.add_widget(SelectionBanner(
cols = 2,
padding = 10,
spacing = 10,
pos_hint = {"top": 1, "left": .5},
size_hint = (1, .2),
workout_title = "Workout B",
last_completed = "Yesterday",
lifts = "Bench and stuff"
))
【问题讨论】:
-
请发布完整的回溯。如果大多数代码对于错误来说不是必需的,请创建一个没有它的测试文件。轻松复制和运行您的代码。
-
“如果我注释掉未内置在基类中的关键字参数(workout_title、last_completed 和 lifts),代码运行没有问题。” 是什么意思?您是否使用这样的参数实例化该类?
-
tdelaney,感谢您对有效问题发布的反馈。这是我的第一篇文章,所以这是对前进的有用反馈。下面约翰安德森的建议解决了我的问题,但为了回答您的问题,我正在实例化该类,如 build_selection_page 函数中所示。完成最后三个参数(我添加的未由基类处理的 kwargs)后,它会引发类型错误。但是,如果我删除了这些论点,它就可以正常工作了。
-
知道了。当我尝试复制时,我一定没有复制足够多的代码。