Python类__init__方法中initDict字典能否引用自身键值?
问题说明
原问题标题表述不够准确,以下示例可清晰说明诉求:判断下方Python代码的语法是否正确。
class food: def __init__(self): initDict = { "fruit": ['apple', 'orange', 'blueberry'], "all_foods": "fruit" + ['broccoli','carrot']} self.Inputs = initDict def idk(self): print(self.Inputs['all_foods']) f = food()
核心需求
让字典中all_foods键对应的值包含fruit键下的所有元素,再追加额外的列表元素。
运行报错
运行上述代码触发类型错误,报错信息如下:
Traceback (most recent call last): File "C:\Users\Temp\2/ipykernel_18476/990716159.py", line 1, in <module> f = food() File "C:\Users\Temp\2/ipykernel_18476/3991279104.py", line 5, in __init__ "all_foods": "fruit" + ['broccoli','carrot']} TypeError: can only concatenate str (not "list") to str
错误原因&修正方案
- 直接报错原因:代码里写的
"fruit"是字符串类型,Python不支持字符串和列表直接做拼接操作。 - 逻辑问题:你实际需要拼接的是
fruit键对应的列表值,而非"fruit"这串字符;同时字典初始化过程中,无法直接在同个字典字面量内引用还没完成定义的其他键值对。 - 修正方式:先单独定义水果列表,再拼接生成全食物列表,最后组装成字典即可,修正后代码如下:
class food: def __init__(self): # 先定义fruit对应的列表 fruit_list = ['apple', 'orange', 'blueberry'] initDict = { "fruit": fruit_list, # 列表相加会合并两个列表的所有元素,生成新列表 "all_foods": fruit_list + ['broccoli','carrot'] } self.Inputs = initDict def idk(self): print(self.Inputs['all_foods']) f = food() f.idk() # 运行输出:['apple', 'orange', 'blueberry', 'broccoli', 'carrot']
注意:上面的写法里
all_foods是独立的新列表,如果后续修改fruit键对应的列表内容,all_foods的值不会自动同步更新。如果需要联动更新,可以在取值时动态拼接两个列表,不需要提前把合并结果存在字典里。
内容的提问来源于stack exchange,提问作者worldCurrencies
相关产品推荐
相关产品推荐

