У меня есть dict
, который я хочу преобразовать в несколько разных объектов. Например:
В настоящее время есть
kwargs = {'this': 7, 'that': 'butterfly'}
И я хочу преобразовать его, возможно, используя что-то похожее на распаковку аргумента функции, но без фактического вызова функции, так что я получаю что-то вроде:
Желанный
**kwargs
print(this) # Will print out `7`
print(that) # Will print out `'butterfly'`
Я знаю, что не могу использовать двойную звезду [**
], как я показал. Но могу ли я сделать что-то подобное?
Изменить: больше деталей
Поскольку люди просили подробностей и предупреждали, что то, что я пытаюсь сделать, опасно, я дам больше контекста для моей потребности.
У меня есть свойство в классе, которое я хочу установить с помощью аргументов ключевого слова. Что-то вроде того, что показано здесь, но распаковка kwargs
вместо args
.
В качестве примера действующей игрушки это выглядит так:
class A(object):
def __init__(self):
self._idx = None
@property
def idx(self):
return self._idx
@idx.setter
def idx(self, kwargs):
print(kwargs)
self._idx = {}
for kw, val in kwargs.items():
self._idx[kw] = val
Это работает. Но теперь я выполняю модульное тестирование функции, и в модульном тесте я хотел бы иметь возможность предоставлять определенные пары ключ-значение как обычные объекты, чтобы я мог эффективно использовать hypothesis
и pytest
@mark.parametrize
эффективно.
Для этого, похоже, мне понадобится голая распаковка, как я описал выше.
Поскольку все это на самом деле локальные переменные в методе, я чувствую, что проблемы @ g.d.d.c, вероятно, несущественны. Похоже, его беспокоило то, что я создал новые глобальные переменные, не зная, что они из себя представляют.