良好做法默认值
Good practice default values
我有几个运输品牌,我想为每个品牌指定所有可用的
模型以及默认模型。
所以我首先这样定义了元组:
SUZUKI = ('model_1', 'model_2', 'model_3')
FERRARI = ('model_1', 'model_2')
# etc
我想为每个品牌指定一个默认型号。问题是有这么多品牌,
为它们中的每一个定义一个默认变量会很乏味:
SUZUKI_DEFAULT = 'model_1'
FERRARI_DEFAULT = 'model_2'
# etc
等等。所以我想知道什么是解决这个问题的好而不是太破旧的解决方案。
为每个品牌创建 class 可能会浪费资源,因为我不需要更多
附加参数或函数。
我想到了做这样的事情,将默认值放在元组的末尾,
然后指定默认值的位置:
DEFAULT_POSITION = -1
SUZUKI = ('model_1', 'model_2', 'model_3', 'model_1')
FERRARI = ('model_1', 'model_2', 'default_model')
PORSCH = ('model_1', 'model_2', None)
# etc
然后我会做一个检查语句,例如:
if arg not in SUZUKI:
arg = SUZUKI[DEFAULT_POSITION]
我的问题是,这是一种不好的做法吗,是否有其他解决方案(如果不是更好的话)?
为什么不使用字典,在我看来是更好的方法。代码本身将变得更容易理解和更容易。
brands = {'Suzuki':['model_1', 'model_2'], 'Ferrari':['model_1', 'model_2']}
然后正常打电话给他们:
brands['Suzuki']
输出:
['model_1', 'model_2']
你可以做一个 class:
class Brand(object):
def __init__(*models, default=None):
self.models = *models
self.default = default
assert default is None or default in models
然后使用它:
SUZUKI = Brand('model_1', 'model_2', 'model_3', default='model_1')
FERRARI = Brand('model_1', 'model_2', default='model_2')
PORSCH = Brand('model_1', 'model_2', default=None)
我有几个运输品牌,我想为每个品牌指定所有可用的 模型以及默认模型。
所以我首先这样定义了元组:
SUZUKI = ('model_1', 'model_2', 'model_3')
FERRARI = ('model_1', 'model_2')
# etc
我想为每个品牌指定一个默认型号。问题是有这么多品牌, 为它们中的每一个定义一个默认变量会很乏味:
SUZUKI_DEFAULT = 'model_1'
FERRARI_DEFAULT = 'model_2'
# etc
等等。所以我想知道什么是解决这个问题的好而不是太破旧的解决方案。 为每个品牌创建 class 可能会浪费资源,因为我不需要更多 附加参数或函数。
我想到了做这样的事情,将默认值放在元组的末尾, 然后指定默认值的位置:
DEFAULT_POSITION = -1
SUZUKI = ('model_1', 'model_2', 'model_3', 'model_1')
FERRARI = ('model_1', 'model_2', 'default_model')
PORSCH = ('model_1', 'model_2', None)
# etc
然后我会做一个检查语句,例如:
if arg not in SUZUKI:
arg = SUZUKI[DEFAULT_POSITION]
我的问题是,这是一种不好的做法吗,是否有其他解决方案(如果不是更好的话)?
为什么不使用字典,在我看来是更好的方法。代码本身将变得更容易理解和更容易。
brands = {'Suzuki':['model_1', 'model_2'], 'Ferrari':['model_1', 'model_2']}
然后正常打电话给他们:
brands['Suzuki']
输出:
['model_1', 'model_2']
你可以做一个 class:
class Brand(object):
def __init__(*models, default=None):
self.models = *models
self.default = default
assert default is None or default in models
然后使用它:
SUZUKI = Brand('model_1', 'model_2', 'model_3', default='model_1')
FERRARI = Brand('model_1', 'model_2', default='model_2')
PORSCH = Brand('model_1', 'model_2', default=None)