如何将字典的键和值转为一个类中属性的名字和值
本帖最后由 FC的注册很坑 于 2020-9-12 15:28 编辑举个例子,已知字典dict={"a":1,"b":2}
然后定义一个类,希望它的属性值是这个字典的key和value,例如:class A:
def __init__(self):
self.a=1
self.b=2
上面是明确知道字典有哪些key,手动定义方法中属性的情况。
但是如果我不知道字典里有什么,只是确定字典格式key都是字符串,这个类的初始输入参数就是这个字典,并且需要把所有key都转为这个类的属性,类似:
class A:
def __init__(self,dict):
for key,value in self.dict.items(): #这句可以得到key,value,但是怎么转成类属性呢?并且key是事先不确定的,即dict里可能不止有a,b,还有其他未知的key也都要变成“self.key=value”
这么做的目的是,变量a,b等会在该类的其他方法中反复出现,并且我想用属性而不是重复用dict['a']来得到值。
>>> class A:
pass
>>> dict1 = {"a": 1, "b": 2, "c": 3}
>>> for key, value in dict1.items():
exec(f"A.{key} = {value}")
>>> A.a
1
>>> A.b
2
>>> A.c
3 本帖最后由 sunrise085 于 2020-9-12 15:42 编辑
dict1={"a":1,"b":2}
class A:
def __init__(self,dict1):
for key,value in dict1.items():
self.__dict__=value
abc=A(dict1)
print(abc.a,abc.b) self.__dict__.update 第三种方法,使用魔法方法:
adict={"a":1,"b":2}
class A:
def __init__(self, anydict):
for k, v in anydict.items():
super().__setattr__(k, v)
acl = A(adict)
print(acl.a)
print(acl.b) setattr(obj, key, value) 内置方法 本帖最后由 hrp 于 2020-9-12 23:46 编辑
Stubborn 发表于 2020-9-12 17:09
setattr(obj, key, value) 内置方法
大佬的意思是这样的
adict={"a":1,"b":2}
class A:
def __init__(self, anydict):
for k, v in anydict.items():
setattr(self, k, v)
acl = A(adict)
print(acl.a)
print(acl.b) hrp 发表于 2020-9-12 17:37
大佬的意思是这样的
在类里面,不要写A,换成self Stubborn 发表于 2020-9-12 23:27
在类里面,不要写A,换成self
get √ 本帖最后由 FC的注册很坑 于 2020-9-13 13:45 编辑
qiuyouzhi 发表于 2020-9-12 15:41
因为value可能是任何类型的数据,如果value是字符串,这种方法好像还有点问题。。。
例如下面的代码
class A:
pass
dict1 = {"a": 1, "b": "2", "c": 3}
for key, value in dict1.items():
exec(f"A.{key} = {value}")
print(A.a)
print(A.b)
print(type(A.a))
print(type(A.b))
结果是:
1
2
<class 'int'>
<class 'int'>
页:
[1]