Правильно ли я считаю, что вы хотите иметь возможность вызывать конструктор с ключевыми словами-аргументами, но использовать значение переменной в качестве имени аргумента, а не само имя переменной?
Это невозможно сделать с таким точным синтаксисом, но вот пара других синтаксисов, которые вы можете использовать:
name = 'bin'
obj = Directory(**{name: dict()})
Если вы довольны этим синтаксисом, вы можете просто использовать его, не меняя класс (он просто будет работать).
Другой синтаксис, если вы хотите установить только одно значение:
name = 'bin'
obj = Directory(name, dict())
Если вы довольны этим синтаксисом, вы можете поддержать его, переписав класс следующим образом:
class Directory:
def __init__(self, name, value):
self.__dict__[name] = value
Для Q2, __slots__
это не то, что вы ищете. Это позволяет вам указать «все члены этого класса имеют одинаковые поля» (таким образом, избегая необходимости иметь словарь). У вас есть яркий пример того, как вы не можете использовать __slots__
, потому что все экземпляры вашего класса могут иметь разных членов.