【问题标题】:Good practice default values良好做法默认值
【发布时间】:2016-04-29 04:13:01
【问题描述】:

我有几个运输品牌,我想为每个品牌指定所有可用的 模型以及默认模型。

所以我首先这样定义元组:

SUZUKI = ('model_1', 'model_2', 'model_3')
FERRARI = ('model_1', 'model_2')
# etc

我想为每个品牌指定一个默认型号。问题是有这么多品牌, 为它们中的每一个定义一个默认变量会很乏味:

SUZUKI_DEFAULT = 'model_1'
FERRARI_DEFAULT = 'model_2'
# etc

等等。所以我想知道什么是解决这个问题的好方法,而不是太破旧的解决方案。 为每个品牌创建一个类可能会浪费资源,因为我不需要更多 附加参数或函数。

我想过做这样的事情,将默认值放在元组的末尾, 然后指定默认值的位置:

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]

我的问题是,这是一种不好的做法,如果没有更好的解决方案,是否还有其他解决方案?

【问题讨论】:

  • 有什么特殊原因不能将默认值作为每个元素的第一个元素吗?您是否出于某种原因需要不同的订单?
  • 完全没有,这就是为什么我放置DEFAULT_POSITION 变量以获得更多可见性的原因。也许它实际上没用我不知道:)
  • 能否向我解释被否决的投票,以便我提示改进的地方?

标签: python python-2.7 tuples default-value


【解决方案1】:

为什么不使用字典,在我看来是更好的方法。代码本身将变得更容易理解和更容易。

brands = {'Suzuki':['model_1', 'model_2'], 'Ferrari':['model_1', 'model_2']}

然后正常调用它们:

brands['Suzuki']

输出:

['model_1', 'model_2']

【讨论】:

  • 谢谢,我看不出使用 dic 有什么好处。此外,我将如何包含我的每个品牌的默认值,我的问题的主题?我认为这会使事情复杂化。
  • 除非我按照 Jim 的建议使用 dicts 的 dict... 请原谅我。
  • @kaligne,也不是在字典中重复字符串并在字典中创建字典。您可以将列表的[0] 设为默认值,例如brands['Suzuki'][0]。当您希望另一个成为默认值时,您可以将其索引为 0,并一遍又一遍地执行此过程。
  • 这个答案可能最适合我的程序的需要。使类 ia 是一个好主意,但在我的程序逻辑中没有“脚”,这将是无用的。
【解决方案2】:

你可以上课:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多