Python 如何在每个getter之后将对象添加到列表中(如何在getter中重复类似的逻辑)

Python 如何在每个getter之后将对象添加到列表中(如何在getter中重复类似的逻辑),python,python-2.7,repeat,getter,Python,Python 2.7,Repeat,Getter,在实际代码中,我将拥有100多个getMessageObject函数。在某些地方,我只会根据需要调用一些getMessageObject函数,这就是为什么我有这些getter 在每个函数中添加这一行msgList.appendmsg会导致人为编程错误,可能会不必要地增加源代码文件的长度 如何让每个getter调用msgList.appendmsg?是否有某种奇特的方式将所有这些逻辑封装到我没有想到的包装器函数中?我很确定decorator不起作用,因为它们看不到函数中的变量,我也必须为我创建的每

在实际代码中,我将拥有100多个getMessageObject函数。在某些地方,我只会根据需要调用一些getMessageObject函数,这就是为什么我有这些getter

在每个函数中添加这一行msgList.appendmsg会导致人为编程错误,可能会不必要地增加源代码文件的长度

如何让每个getter调用msgList.appendmsg?是否有某种奇特的方式将所有这些逻辑封装到我没有想到的包装器函数中?我很确定decorator不起作用,因为它们看不到函数中的变量,我也必须为我创建的每个函数重复这些decorator

注意:答案必须是Python2。不能在工作中使用蟒蛇3


注意:目的是将这些getter放在一个类似常量的文件中,在这个文件中,我们的许多不同的测试脚本调用这些getter。

最简单的解决方案就是对函数进行泛化。每个getItem函数之间的唯一区别是传递给GenerateItem的参数。只需将该数据传递到getItem:

如果需要具有特定名称的函数,只需创建别名即可。这可以通过以下方式轻松完成:

参数部分应用于getItem,并返回一个0-arity函数并将其放置在别名中

当然,手动硬编码所有这些也会导致错误源。如果有必要,您可能需要重新考虑如何进行设置。

为什么首先要在getter中填充itemList

您可以做的是,在调用此类getter时,添加一行用于将相应项追加到列表中

from functools import partial

getItemA = partial(getItem, val1, val2)
getItemB = partial(getItem, val3, val4)

a = getItemA()
b = getItemB()

是的,这就是区别。它们取决于它是什么样的物品。特别是,它是什么类型的消息对象。所以,是的,会有程序员错误的原因,但希望我不会把它搞砸。对不起,我应该指定getter将在一个常量中,比如文件,我们的许多测试脚本都在其中调用这些getter。我认为这个解决方案行得通,让我来试一试。有关我所问的问题的更多说明,请参阅我编辑的问题,但解决方案是可行的!谢谢@老实说,在今晚晚些时候去听音乐会之前,我得小睡一会儿。如果这个解决方案需要改进,我可以在几小时内/明天帮助您完成。@FridaySky我会将您的所有消息属性压缩到一个成对的列表中,然后迭代该列表,创建部分函数,然后将它们添加到供测试代码使用的函数列表/字典中。这样,您就可以自动创建函数,而无需手动硬编码。我们始终希望将项目消息添加到列表中,以便稍后清除所有消息。
# Test Script #1
import MessageObjects as MsgObj

a = MsgObj.getMessageObjectA()
c = MsgObj.getMessageObjectC()

# Do stuff

MsgObj.clearMessages()

# Do more stuff

# Test Script #223423423
import MessageObjects as MsgObj

e = MsgObj.getMessageObjectE()
u = MsgObj.getMessageObjectU()
y = MsgObj.getMessageObjectY()

# Do stuff

MsgObj.clearMessages()

# Do more stuff

def getItem(arg1, arg2):
    item = GenerateItem(arg1, arg2)
    itemList.append(item)
    return item

a = getItem(val1, val2)
b = getItem(val3, val4)
from functools import partial

getItemA = partial(getItem, val1, val2)
getItemB = partial(getItem, val3, val4)

a = getItemA()
b = getItemB()
a = getItemA()
itemList.append(a)