使用构造函数内部的循环设置类属性

时间:2019-06-25 11:06:54

标签: python class constructor

我有一个简单的类(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

我为什么要这样做?

  1. 列表很长

  2. 我正在使用外部嵌套字典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()__构造函数中循环遍历属性。

2 个答案:

答案 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)