Python 确保字符串的更改不会发生';不要在大型节目的其他地方不被注意
Python 确保字符串的更改不会发生';不要在大型节目的其他地方不被注意,python,python-3.4,Python,Python 3.4,所有可能的狗玩具是一个大列表,包含狗主人可以为他的狗购买的每个玩具的名称 ALL_POSSIBLE_DOG_TOYS = ['large_chew_bone', 'treat_ball', .... ] 如果主人购买了一个特定的玩具,它会以不同的方式影响狗的幸福感,这取决于一些因素(例如狗的品种、年龄等) 因此,在我代码中的某些地方,我需要检查某个特定玩具是否由所有者购买,也就是说,某个玩具是其self.toys\u purchased列表的一部分 e、 g 我需要在15k LOC计划的不同位
所有可能的狗玩具
是一个大列表,包含狗主人可以为他的狗购买的每个玩具的名称
ALL_POSSIBLE_DOG_TOYS = ['large_chew_bone', 'treat_ball', .... ]
如果主人购买了一个特定的玩具,它会以不同的方式影响狗的幸福感,这取决于一些因素(例如狗的品种、年龄等)
因此,在我代码中的某些地方,我需要检查某个特定玩具是否由所有者购买,也就是说,某个玩具是其self.toys\u purchased
列表的一部分
e、 g
我需要在15k LOC计划的不同位置执行上述检查。
我还想确保,如果我在所有可能的\u狗\u玩具
中更改某个玩具的名称,如果检查,我不会忘记在我的中更改其名称
实现这一目标的一种方法是执行以下操作:
DOG_TOYS_AS_DICT = {
'large_chew_bone': 'large_chew_bone',
'treat_ball': 'treat_ball',
...
...
}
也就是说,创建一个dict,每个键与其值相同
然后使用DOG\u TOYS\u作为默认值,而不是直接使用实际的玩具名称:
# Check if a specific toy is bought.
if DOG_TOYS_AS_DICT['treat_ball'] in self.toys_purchased:
# Do stuff with treat balls.
# ...
这样,如果我将所有可能的狗玩具中的'treat\u ball'
更改为'ball\u with\u treats'
,我会在\检查是否购买了特定的玩具,这样我就可以将'treat\u ball'
更改为新字符串
问题:
有没有更清晰的方法来确保对任何玩具名称的更改不会在程序的其余部分被忽略?其中一种方法-在IDE中编辑您的代码,例如PyCharm,这样当您需要重命名时-使用重构菜单,它会在程序中的任何地方更改名称。为什么不创建一个外部数据库,包含这些玩具的名称、类别、昵称、商品编号等。。。?似乎有一个DB_API
库,可以用来访问MySQL、Oracle等等。。。数据库。还是我在你的问题中遗漏了什么?只需使用命名变量<代码>大嚼骨=‘一些骨头’
。之后,只需使用名称而不是字符串。@ŁukaszR。这不太实际,因为我必须创建几十个这样的名称。(我将进行相应的编辑以澄清所有可能的狗玩具都是大的)。@Fermi paradox:Uselocals()['my\u var']='my\u var'
?就像所有可能的狗玩具中的玩具一样:locals()[toy]=toy
。现在,您将有一个名为large\u chew\u bone
的变量,其中包含'large\u chew\u bone'
@mshsayem听起来是个不错的主意,但由于它是一个巨大的程序,我不知道是否有与玩具同名的方法或函数(这会导致bug)。因此,在我的情况下,这仍然是有风险的。不,我的意思是使所有狗玩具成为可能和自我。购买的狗玩具一个新类的实例列表,狗玩具,而不是字符串。这样,你就可以把玩具对狗的幸福感的影响与它的名字和其他属性一起存储在列表中。如果您在该类上实现了\uuuuuuuueq\uuuuuuu
和\uuuhash\uuuuuuu
,您仍然可以使它们成为集合而不是列表(对于O(1)
成员资格测试),我不能这样做。当我尝试重命名字符串时,“重构”中的“重命名”选项变灰。当您更改标识符时,PyCharm将(可选)在字符串中搜索,但我认为这不适用于更改文本字符串。
# Check if a specific toy is bought.
if DOG_TOYS_AS_DICT['treat_ball'] in self.toys_purchased:
# Do stuff with treat balls.
# ...