如何使用**kwargs为Python类实例的内部字典添加可选键值对
完全可以通过**kwargs实现该需求,不需要额外编写if/else判断逻辑,具体实现方案如下:
实现方案
方法1:初始化时直接合并字典(推荐)
**kwargs本身就是存储所有额外传入键值对的字典,直接将其解包到info字典的定义中即可,该写法兼容所有Python3版本:
class Book: def __init__(self, title, author, **kwargs): self.info = { 'title': title, 'author': author, **kwargs }
如果是Python 3.9及以上版本,也可以用字典并集运算符简化写法:
self.info = {'title': title, 'author': author} | kwargs
方法2:调用字典update方法
如果需要先初始化基础info字典再追加可选参数,直接调用字典的update()方法传入kwargs即可,和方法1效果完全一致:
class Book: def __init__(self, title, author, **kwargs): self.info = { 'title': title, 'author': author, } self.info.update(kwargs)
使用示例
# 传入可选参数year、publisher book1 = Book("三体", "刘慈欣", year="2008", publisher="重庆出版社") print(book1.info) # 输出:{'title': '三体', 'author': '刘慈欣', 'year': '2008', 'publisher': '重庆出版社'}
注意事项
- 如果需要避免用户传入的可选参数覆盖
title、author两个必填字段,只需要调整字段写入顺序,把必填项放在kwargs解包之后即可:
# 即使用户传入了title参数到kwargs中,也会被强制覆盖为传入的必填title值 self.info = {**kwargs, 'title': title, 'author': author}
内容的提问来源于stack exchange,提问作者willowgavette
相关产品推荐
相关产品推荐

