我使用easydict库来设置配置,但当我将配置存储为字符串时,它会将字符串变成字符串本身的列表,如下所示:
from easydict import EasyDict
conf = EasyDict()
conf.name = 'CD Group'
print(conf.name)
> ['CD Group'] # a list
但我希望实现的是:
> CD Group # string type
为什么是这样?感谢您的反馈!
easydict源
一个有趣的点是,当我将配置从argparse传递到easdict时,类型不会出错,如下所示:
conf.file_name = args.file_name # --file_name input.xlsx
print(conf.file_name)
> input.xlsx
查看__setattr__
def __setattr__(self, name, value):
if isinstance(value, (list, tuple)):
value = [self.__class__(x)
if isinstance(x, dict) else x for x in value]
elif isinstance(value, dict) and not isinstance(value, self.__class__):
value = self.__class__(value)
正如您在__setattr__
方法中看到的那样,如果您将变量作为列表或元组传递,则会得到一个列表,否则会得到原始类型。
我没有你提到的问题:
conf = EasyDict()
conf.name = 'CD Group'
conf.name2 = ['CD Group']
print(conf.name , conf.name2, sep='n')
输出:
>>
CD Group
['CD Group']