确保在大型程序的其他位置不会忽略字符串的更改

时间:2015-10-26 08:51:44

标签: python python-3.4

ALL_POSSIBLE_DOG_TOYS是一个列表,其中包含狗主人可以为他的狗购买的每个玩具的名称。

ALL_POSSIBLE_DOG_TOYS = ['large_chew_bone', 'treat_ball', .... ]

如果主人购买了特定的玩具,它会以各种方式影响狗的快乐,具体取决于某些因素(如狗的品种,年龄等)。

因此,在我的代码的某些地方,我需要检查所有者是否购买了特定的玩具,也就是说,玩具是他的self.toys_purchased列表中的一部分。

e.g。

# Check if a specific toy is bought.

if 'treat_ball' in self.toys_purchased:
    # Do stuff with treat balls.
    # ...

我需要在15k LOC程序的不同位置执行上述检查。 我还想确保如果我更改ALL_POSSIBLE_DOG_TOYS中的玩具名称,我将不会忘记在我的if支票中更改其名称。

实现这一目标的一种方法是执行以下操作:

DOG_TOYS_AS_DICT = {
    'large_chew_bone': 'large_chew_bone',  
    'treat_ball': 'treat_ball',
    ...
    ...
}

也就是说,创建一个dict,每个键与其值相同。

然后使用DOG_TOYS_AS_DICT值而不是直接使用实际的玩具名称:

# Check if a specific toy is bought.

if DOG_TOYS_AS_DICT['treat_ball'] in self.toys_purchased:
    # Do stuff with treat balls.
    # ...

这样,如果我将'treat_ball'中的ALL_POSSIBLE_DOG_TOYS更改为'ball_with_treats',我会在# Check if a specific toy is bought的位置获得(期望的)KeyError,以便我可以更改'treat_ball'到新字符串。

问题:
是否有更清晰的方法确保任何玩具名称的更改在程序的其余部分中不会被忽视?

2 个答案:

答案 0 :(得分:0)

其中一种方法 - 在IDE中编辑你的代码,比如PyCharm,所以当你需要重命名时 - 使用重构菜单,这将改变程序中的所有名称。

答案 1 :(得分:0)

为什么不创建外部数据库,包含这些玩具的名称,类别,昵称,文章编号,......?似乎有一个DB_API库可用于访问MySQL,Oracle,...数据库。或者我在你的问题中遗漏了什么?