Переменное количество аттрибутов экзамеляра класса

Я хочу написать класс на python, который в конструкторе принимает переменное число аргументов, которые должны быть в будущем аттрибутами данного обьекта класса Например:

class MyClass:
    def __init__(self, *argv):
        for i in range(int((len(argv) - 3) / 2)):
            self[argv[2 * i - 2]] = argv[2 * i - 1]

Сам main.py:

t = MyClass("name", "Ivan", "surname", "Ivanov")

Но проблема в том, что у экземпляра t класса MyClass аттрибутов name и surname нет (это я проверяю с помощью функции dir(t)). Как я могу исправить эту пробллему, чтобы я могла задавать переменное количество аттрибутов для определенного обьекта класса?


Ответы (1 шт):

Автор решения: Xander

Вам нужен setattr

class MyClass:

    def __init__(self, *argv):

        for i in range(int((len(argv)) / 2)):
            key = argv[2 * i]
            value = argv[2 * i + 1]
            setattr(self, key, value)  # вот так вот

Ну и с индексами вы что-то перемудрили (если передано четыре аргумента, то int((len(argv) - 3) / 2) получается равным нулю и цикл вообще не выполняется), я поправил.

→ Ссылка