继承pandastable的Table类新增属性后初始化报错原因求解
错误原因
你自定义的MyTable子类构造方法参数顺序错误,导致父类Table没有接收到正确的父容器参数,这就是修改__init__后才触发报错的核心原因:
- 原生
Table类的构造方法第一个位置参数要求传入父容器组件,你未修改__init__直接使用Table类时,传入的frame会被正确接收,不会出现空值问题 - 你自定义
__init__时把自定义参数list_items放在了第一个位置,实例化时写的MyTable(frame, dataframe=df)会把frame赋值给list_items,父类Table需要的parent参数没有接收到有效值,默认为None - 父类初始化逻辑中
self.parentframe就是传入的parent参数,因此调用self.parentframe.master时就触发了NoneType无master属性的报错
修复方案
方案1(推荐):自定义参数后置,用关键字传递
将自定义参数放到*args和**kwargs之间,避免占用父类的位置参数位:
class MyTable(Table): def __init__(self, *args, list_items=None, **kwargs): self.list_items = list_items super().__init__(*args, **kwargs)
实例化时通过关键字传入自定义参数即可:
# 示例传入list_items为[1,2,3] pt = MyTable(frame, dataframe=df, list_items=[1,2,3])
方案2:调整实例化传参顺序
如果一定要保留list_items在构造方法第一个参数位,实例化时先传list_items的值,再传父容器:
pt = MyTable([1,2,3], frame, dataframe=df)
内容的提问来源于stack exchange,提问作者Mazze
相关产品推荐
相关产品推荐

