类初始化时解引用变量
这是我用来初始化类字典的代码:
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__
,因为你这个类的所有实例可能会有不同的成员。