我的问题的第一部分是如何访问类的预设默认参数以将其值用作其他参数?我想做的是这样的事情:
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
但在初始化时self
和C
也未知。
第二个问题是在上面的类定义中如何设置kwargs
字典中的键值作为实例属性?
我知道这不起作用,但我的意思是:
for k, v in kwargs.items():
self.k = v
答案 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)