假设我有两个模块module1
和module2
,module1
可以包含对象chair1
,chair2
和chair3
。我想检查module2
中是否存在其中一个对象,如果它存在,则从module2
运行一个方法。类似的东西:
# module2
if ("chair" + str(i)) in globals():
globals()["chair" + str(i)].carve() # i = 1, 2 or 3
这显然无效,因为chair1
,chair2
和chair3
不在globals()
module2
解决此问题的最佳方法是什么?
修改
Rob的回答(hasattr()
)解决了检查对象是否存在于另一个模块中的问题。第二部分,关于运行我使用字典解决的对象的方法(类似于:obj_names = {"chair1" : chair1, "chair2" : chair2, "chair3 : chair3}
而不是尝试使用global()
函数。正如其他问题所推荐的那样,这是最pythonic的方法。第一部分也可以用字典解决,比如如果对象不存在则设置obj_names[i] = 0
。
顺便说一下,对于我的特殊问题,我不需要超过10把椅子,所以使用字典并不是一个糟糕的选择。但是如果定义问题以便椅子的数量可以是任何int,那么使用像global()
这样的东西会更合乎逻辑。