我创建了一个类来包装一个值,以便我可以将其作为列表或普通值访问。但是,我只能将值表示为字符串或 int,而不是其本机类型。有一个更好的方法吗?
class Options(object):
default_option = None
class Option(object):
def __init__(self, name, value):
self.name = name
if isinstance(value, list):
self.value = [] + value
else:
self.value = [ value ]
def __str__(self): return self.value[-1]
def __long__(self): return self.value[-1]
def __int__(self): return self.value[-1]
def __float__(self): return self.value[-1]
def __getitem__(self, index): return self.value[index]
setattr(Options, 'opt', Option('opt', None))
print Options.opt
产生输出:
'None'
但我不能进行这种类型的比较:
if Options.opt is None:
虽然这确实有效:
if Options.opt[0] is None:
if Options.opt != "some value":
if Options.opt == 1:
这样做的目的是让我不必去其他地方重构代码,这些代码可能将选项称为值而不是列表。可重复选项的引入将列表引入所有选项,因此需要一个包装器来允许访问值而无需将其作为列表进行访问。