类初始化时的解引用变量

ajm*_*tin 3 python dictionary

这是我初始化类字典的代码:

class Directory:
    def __init__(self, **kwds):
        self.__dict__.update(kwds)
obj = Directory(name=dict())
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,密钥是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`
Run Code Online (Sandbox Code Playgroud)

问.还有其他最佳实施方法吗?(可能是__slots__)

谢谢!

mgi*_*uca 5

我是否正确地认为您希望能够使用关键字参数调用构造函数,但是使用变量的值作为参数名称,而不是变量名称本身?

使用这种精确的语法无法做到这一点,但是您可以使用以下几种其他语法:

name = 'bin'
obj = Directory(**{name: dict()})
Run Code Online (Sandbox Code Playgroud)

如果您对该语法感到满意,则可以使用它而无需更改类(它只会起作用).

另一种语法,如果您只想设置一个值:

name = 'bin'
obj = Directory(name, dict())
Run Code Online (Sandbox Code Playgroud)

如果您对该语法感到满意,可以通过重写类来支持它:

class Directory:
    def __init__(self, name, value):
        self.__dict__[name] = value
Run Code Online (Sandbox Code Playgroud)

对于Q2,__slots__不是你想要的.它允许您指定"此类的所有成员具有相同的字段"(因此无需使用字典).您有一个不能使用的主要示例,__slots__因为您的类的所有实例可能具有不同的成员.