Установка атрибутов класса с помощью цикла внутри конструктора - PullRequest
0 голосов
/ 25 июня 2019

У меня есть простой класс (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, который имеет id в качестве ключей и {'a': 1, 'b': 2, 'c': 3} в качестве значения

Так что на самом деле это будет выглядеть так:

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

Добавление атрибутов класса с использованием цикла for в Python является аналогичным вопросом, но не идентичным;Я особенно заинтересован в прохождении по атрибутам при создании экземпляра класса, то есть в конструкторе __init()__.

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Вы можете поместить атрибуты, которые вы хотите установить, в переменную класса, а затем просмотреть их с помощью setattr:

class Potato:

    _attributes = ['a', 'b', 'c']

    def __init__(self, id, d):
        for attribute in _attributes:
            setattr(self, attribute, d[id][attribute])
0 голосов
/ 25 июня 2019

вы можете сделать это, используя setattr on self:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...