为什么使用 easydict 无法正确读取字符串?
Why strings are not read correctly using easydict?
我使用 easydict 库来设置配置,但是当我将配置存储为字符串时,它会将字符串变成字符串本身的列表,如下所示:
from easydict import EasyDict
conf = EasyDict()
conf.name = 'CD Group'
print(conf.name)
> ['CD Group'] # a list
但我希望达到的是:
> CD Group # string type
为什么会这样?
感谢您的任何反馈!
有趣的一点是,当我将配置从 argparse 传递到 easydict 时,类型没有出现错误,如下所示:
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']
我使用 easydict 库来设置配置,但是当我将配置存储为字符串时,它会将字符串变成字符串本身的列表,如下所示:
from easydict import EasyDict
conf = EasyDict()
conf.name = 'CD Group'
print(conf.name)
> ['CD Group'] # a list
但我希望达到的是:
> CD Group # string type
为什么会这样? 感谢您的任何反馈!
有趣的一点是,当我将配置从 argparse 传递到 easydict 时,类型没有出现错误,如下所示:
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']