使用 **kwargs 将字典键 + 值分配给 class 实例

Using **kwargs to assign dictionary keys + values to a class instance

我正在尝试使用 **kwargs 在 class 的实例中创建字典。我想将我的 Book class 两个必需的变量(titleauthor)以及一些可选的 key/value 对交给它,并让它创建一个内部字典来保存这些变量键和值。这是我的代码:

class Book:
    
    def __init__(self, title, author, **kwargs):

        self.info = {
            'title': title,
            'author': author,
        }

例如,我想给 Book 一个像 year='1961' 这样的参数,并让它设置一个 key/value 对 ('year': '1961')。到目前为止,我一直在为此使用 if/else 语句,但这似乎效率低下且丑陋。我可以使用 **kwargs 来完成吗?

是的,你可以使用 kwargs,我想你正在寻找以下代码:

class Book:

    def __init__(self, title, author, **kwargs):

        self.info = {
            'title': title,
            'author': author,
        }

        for key, value in kwargs.items():
            self.info[key] = value

没关系,我刚刚弄明白了。

class Book:
    
    def __init__(self, title, author, **kwargs):

        self.info = {
            'title': title,
            'author': author,
        }

        for key, value in kwargs.items():
            self.info[key] = value

回想起来这应该是显而易见的

kwargs 可以被视为字典,您可以通过几种不同的方式合并两组数据 depending on your python version.

3.9+:

class Book:
    def __init__(self, title, author, **kwargs):
        self.info = {
            'title': title,
            'author': author,
        } | kwargs

3.5+:

class Book:
    def __init__(self, title, author, **kwargs):
        self.info = {
            'title': title,
            'author': author,
            **kwargs}

<3.4:

class Book:
    def __init__(self, title, author, **kwargs):
        self.info = {
            'title': title,
            'author': author,
        }
        self.info.update(kwargs)