这似乎会做它'需要做'的事情,但我觉得这是一个不好的捷径。我的意思是我们拥有所有这些pub-sub库是有原因的,对吗?
def fakeMessagePasser(myFunction, listOfListeners):
for obj in listOfListeners:
try:
success = getattr(obj, myFunction)()
except AttributeError:
handleTheSituationCorrectly()
我知道Python更倾向于请求宽恕而不是许可,但如果是这样的话,为什么人们会首先考虑使用“复杂的”基于订阅的对象消息库?似乎这种语言是为了处理这种天生而设置的 - 但正如经常发生的那样,我可能只是在我的知识中有一个大洞,否则会告诉我为什么这是一件坏事。
这甚至是好的 - 还是用另一种方式,意图 - 应用try / except?就像,如果我们在游戏循环中,我们看到这样的事情:
#incoming pseudocode, not based on anything in particular
for enemy in objectQueue:
if enemy.hasGoodGuyInSights():
try:
enemy.attack()
except AttributeError: ##maybe this object has no attack method, it just 'follows' or something, who knows why bad guys do anything really
handleTheSituationCorrectly()
这并不直接导致家庭成员或任何事情的死亡,但它是否善于尝试/除了 - 或者更重要的是,它是否被认为是“pythonic”以这种方式做到这一点?
我问,因为我觉得好像我通常会看到try / except而不是类型检查:我们希望将对象视为某种类型,并且当它失败时我们会正确处理它。所以看起来使用try / except来确保我们遍历列表或dict,而不是使用它来调用方法然后正确地失败/忽略'not-a-message'。正确?
答案 0 :(得分:0)
您所描述的内容可以以有限的方式模拟pub-sub - 我认为这是一个最小的测试框架。但是你错过了生产中需要的一些重要方面: