这是我用于初始化类字典的代码:
class Directory:
def __init__(self, **kwds):
self.__dict__.update(kwds)
obj = Directory(name=dict())
在上述情况下,密钥为name
,可以使用以下方式访问:
obj.__dict__.['name']
或obj.name
Q1。如何使用键值作为变量的值来初始化类字典?
代码看起来像是:
name = 'bin'
obj = Directory(name=dict()) #here I want the variable `name` to be replaced by its value i.e. `bin`
问题。还有其他最佳实施方法吗? (可能是__slots__
)
谢谢!
答案 0 :(得分:5)
我是否正确地认为您希望能够使用关键字参数调用构造函数,但是使用变量的值作为参数名称,而不是变量名称本身?
使用这种精确的语法无法做到,但是您可以使用以下几种其他语法:
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__
的一个主要示例,因为您班级的所有实例可能都有不同的成员。