首页 > 解决方案 > Python Insantiate 对象忽略其他参数

问题描述

我经常遇到这个问题:

我定义了一个 python 类,例如:

class A(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b

然后我有一些带有附加属性的数据,我需要将它们转换为这个对象。

例如data={"a": 1, "b": 2, "c": 3}

如何创建对象 A,忽略数据中的任何其他属性,使用语法(例如)A(**data)或使用通用辅助方法(例如,toObject(A, **data) 不包括**kwargs在我的类 A 的定义中)。

标签: pythonpython-3.x

解决方案


通常,您将只能使用 hackey 方法。老实说,我想不出你为什么不能直接提供你需要的论据的任何理由。但是 Python 有很多自省/元编程能力,所以你可以把类似的东西组合在一起:

import inspect

def instantiate(cls, payload):
    params = inspect.signature(cls).parameters
    return cls(**{k:payload[k] for k in params})

my_a = instantiate(A, data)

但实际上,这对我来说只是主要的代码气味。

你应该只使用A(data['a'],data['b'])


推荐阅读