类初始化时解引用变量

3 投票
1 回答
1078 浏览
提问于 2025-04-16 15:02

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

class Directory:
    def __init__(self, **kwds):
        self.__dict__.update(kwds)
obj = Directory(name=dict())

在上面的例子中,键是 name,可以通过以下方式访问: obj.__dict__.['name']obj.name

问题1:我怎样才能用变量的值来初始化类字典的键?

代码应该像这样:

name = 'bin'
obj = Directory(name=dict()) #here I want the variable `name` to be replaced by its value i.e. `bin`

问题2:还有其他更好的实现类的方法吗?(可能是 __slots__

谢谢!

1 个回答

5

我理解你的意思是,你想用关键字参数来调用构造函数,但希望用变量的值作为参数名,而不是变量的名字本身,对吗?

这种具体的写法是做不到的,不过这里有几种其他的写法可以试试:

name = 'bin'
obj = Directory(**{name: dict()})

如果你觉得这种写法可以接受,那就直接用它,不用改动类(这样就能正常工作)。

还有一种写法,如果你只想设置一个值的话:

name = 'bin'
obj = Directory(name, dict())

如果你觉得这种写法也可以,那就可以通过重新写这个类来支持它:

class Directory:
    def __init__(self, name, value):
        self.__dict__[name] = value

关于第二个问题,__slots__ 不是你需要的东西。它的作用是让你指定“这个类的所有成员都有相同的字段”(这样就不需要字典了)。你有一个很好的例子说明了为什么你不能使用 __slots__,因为你这个类的所有实例可能会有不同的成员。

撰写回答