我有一个简单的类(Python 3.6):
class MyClass:
id: int
a: int
b: int
c: int
我希望在使用循环实例化时设置类属性,例如:
class MyClass:
def __init__(self, id):
self.id = id
for attr in ['a', 'b', 'c']:
# put something in "self.attr", e.g. something like: self.attr = 1
id: int
a: int
b: int
c: int
我为什么要这样做?
列表很长
我正在使用外部嵌套字典d
实例化值的 some ,该字典具有id
作为键和{'a': 1, 'b': 2, 'c': 3}
作为值< / p>
所以实际上这看起来像:
class MyClass:
def __init__(self, id, d):
self.id = id
for attr in ['a', 'b', 'c']:
# put d[id][attr] in "self.attr", e.g. something like: self.attr = d[id][attr]
id: int
a: int
b: int
c: int
Adding class attributes using a for loop in Python是一个类似的问题,但不完全相同。我特别想在实例化类时,即在__init()__
构造函数中循环遍历属性。
答案 0 :(得分:1)
您可以将要设置的属性放在类变量中,然后使用setattr
遍历它们:
class Potato:
_attributes = ['a', 'b', 'c']
def __init__(self, id, d):
for attribute in _attributes:
setattr(self, attribute, d[id][attribute])
答案 1 :(得分:0)
您可以在self
上使用setattr来完成此操作:
class MyClass:
def __init__(self, id, d):
self.id = id
for attr in ['a', 'b', 'c']:
setattr(self, attr, d[id][attr])
d = {"123": {'a': 1, 'b': 2, 'c': 3}}
instance = MyClass("123", d)
print(instance.a)
print(instance.b)
print(instance.c)