如何在 Python 构造函数中分配关键字可变参数?

How can I assign keyword varargs in a Python constructor?

我使用参数 s = 1、t = 2、y = 3 调用构造函数,但没有 p。因为 p 未定义,所以未设置。我考虑过使用 * 而不是 **,但我仍然想使用关键字。

class Creator(object):

    def __init__(self, **kwargs):
        if len(kwargs) > 1:
            self.scenario = kwargs.pop('s')
            self.t = kwargs.pop('t')
            self.y = kwargs.pop('y')
            self.p = kwargs.pop('p')

如何解析我选择的参数(即 var(kw)args),同时忽略那些我没有传递的参数?

因为kwargs只不过是dict,所以dict的所有方法都可以用在上面。

特别是,如果您想从中检索可能不存在的值,您可以使用 dict.get.

Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.

因此代码如下所示:

self.p = kwargs.get('p')  # self.p will be None if "p" is not in kwargs
self.p = kwargs.get('p', MY_VALUE)  # self.p will be MY_VALUE if "p" is not in kwargs

或者,成员身份的标准检查也可以:

if 'p' not in kwargs:
    pass  # do something