如何在类中将字典值作为变量返回

时间:2018-08-10 06:26:25

标签: python

我有一个下面的类,它以输入kwargs返回字典。

class Emp_Constant:
    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

但是,在某些情况下,我想将字典作为该类的输入,并将键值作为变量访问。

例如,如果我的字典是{'name': 'Tome', 'age':'26'},则 我想按如下方式访问“ Tom”:

set = {'name': 'Tom', 'age':'26'}
a = Emp_Constant(set)
first_emp = a.NAME (where NAME is a variable that holds value of key 'name')

这有可能实现吗?

5 个答案:

答案 0 :(得分:3)

只需使用字典开箱

a = Emp_Constant(**set)

答案 1 :(得分:1)

当然,请使用“ double-splat”运算符将字典作为关键字参数解压缩,然后使用getattr

In [30]: class Emp_Constant:
    ...:     def __init__(self, **kwargs):
    ...:         for key, value in kwargs.items():
    ...:             setattr(self, key, value)
    ...:

In [31]: data = {'name': 'Tom', 'age':'26'}
    ...: a = Emp_Constant(**data)
    ...:
    ...: NAME = 'name'
    ...:
    ...:

In [32]: getattr(a, NAME)
Out[32]: 'Tom'

答案 2 :(得分:1)

使用obj_dict = Emp_Constant(**set)


使用EasyDict库的另一种方式:

from easydict import EasyDict as edict

set = {'name': 'Tom', 'age':'26'}
obj_dict = edict(set)

print(obj_dict.name)

[出]:

'Tom'

答案 3 :(得分:1)

您是说要让班级采用姓名和年龄?

怎么样:

class Emp_Constant:
def __init__(self, useADict=None, **kwargs):
    if useADict:
        self.name = useADict.name
        self.age = useADict.age
    else:
        for key, value in kwargs.items():
            setattr(self, key, value)

答案 4 :(得分:0)

问题是您将字典作为第一个参数传递,而不是在示例中使用**-,您应该这样做:

set = {'name': 'x', 'age': 10}
a = Emp_Constant(**set)

然后您可以访问a.name