Python在初始时访问默认参数

时间:2016-10-04 18:20:03

标签: python class python-3.x kwargs

我的问题的第一部分是如何访问类的预设默认参数以将其值用作其他参数?我想做的是这样的事情:

class C:

    def __init__(self, size_hint = (0, 0), **kwargs):
        self.size_hint = size_hint

然后制作一个实例:

>>> c=C(x = self.size_hint)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'self' is not defined

但在初始化时selfC也未知。

第二个问题是在上面的类定义中如何设置kwargs字典中的键值作为实例属性? 我知道这不起作用,但我的意思是:

for k, v in kwargs.items():
    self.k = v

1 个答案:

答案 0 :(得分:0)

以下是您第一个问题的答案(使用inspect.signature):

import inspect

class C:
    def __init__(self, size_hint = (0, 0), **kwargs):
        self.size_hint = size_hint


assert inspect.signature(C.__init__).parameters['size_hint'].default == (0, 0)

有一种更简单的方法来获取默认参数值,但如果您不使用仅关键字参数,则不允许您通过参数名称获取它们:

assert C.__init__.__defaults__ == ((0, 0),)

第二个问题的答案:

for k, v in kwargs.items():
    setattr(self, k, v)