繁体   English   中英

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

[英]How do I return dictionary value as variable within the class

我有以下类,它返回给定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')

这有可能实现吗?

只需使用dict拆包

a = Emp_Constant(**set)

当然,使用“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'

使用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)

[OUT]:

'Tom'

你的意思是你希望班级以任何方式取名和年龄?

怎么样:

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)

问题是您将字典作为第一个参数传递,而不是使用** - 在您的示例中,您应该已经完成​​:

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

然后你可以访问a.name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM