类初始化时的解引用变量

时间:2011-04-04 07:15:37

标签: python dictionary

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

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__

谢谢!

1 个答案:

答案 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__的一个主要示例,因为您班级的所有实例可能都有不同的成员。