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

问题描述 投票:0回答:2
# Message Object Creation File
messageList = []

def getMessageObjectA():
    msg = MessageCreator(msgAttribute1, msgAttribute2)
    msgList.append(msg)
    return msg

def getMessageObjectB():
    msg = MessageCreator(msgAttribute3, msgAttribute4)
    msgList.append(msg)
    return msg

def getMessageObjectC():
    msg = MessageCreator(msgAttribute5, msgAttribute6)
    msgList.append(msg)
    return msg

def clearMessages():
    for msg in messageList:
        # logic to clear messages
# 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

在实际代码中,我将有一百多个getMessageObject()函数。在某些地方,我只会根据需要调用其中的一些getMessageObject()函数,这就是为什么要使用这些getter的原因。

在每个函数中添加此行msgList.append(msg)会引入人为编程错误,并可能不必要地增加源代码文件的长度。

我如何进行每次吸气剂呼叫msgList.append(msg)?有没有一种花哨的方法可以将所有这些逻辑包装到我没有想到的包装函数中?我很确定装饰器将无法工作,因为它们看不到函数内部的变量,因此我也必须为我制作的每个函数重复这些装饰器。

注意:答案必须在Python2中。无法在工作中使用Python3。

[注意:这些getters()的意图是放在类似Constants的文件中,我们许多不同的测试脚本在其中将它们称为这些getter。

python python-2.7 repeat getter
2个回答
1
投票

最简单的解决方案是泛泛泛泛的功能。每个getItem#函数之间的唯一区别是传递给GenerateItem的参数。只需将数据传递到getItem

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

a = getItem(val1, val2)
b = getItem(val3, val4)

如果需要具有特定名称的功能,只需创建别名。使用functools.partial

可以轻松完成此操作
functools.partial

将参数from functools import partial getItemA = partial(getItem, val1, val2) getItemB = partial(getItem, val3, val4) a = getItemA() b = getItemB() 应用于partial,并返回一个0的arity函数并将其放在别名中。

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


0
投票

为什么首先要在吸气剂中填充getItem

您可以做的是,当您调用此类吸气剂时,添加一行以将相应的项目附加到列表中

itemList
© www.soinside.com 2019 - 2024. All rights reserved.