如何检查是否存在任意类实例并从另一个模块调用其方法?

时间:2018-05-29 07:59:14

标签: python python-2.7 oop

假设我有两个模块module1module2module1可以包含对象chair1chair2chair3。我想检查module2中是否存在其中一个对象,如果它存在,则从module2运行一个方法。类似的东西:

# module2
if ("chair" + str(i)) in globals():
    globals()["chair" + str(i)].carve() # i = 1, 2 or 3

这显然无效,因为chair1chair2chair3不在globals() module2

解决此问题的最佳方法是什么?

修改

Rob的回答(hasattr())解决了检查对象是否存在于另一个模块中的问题。第二部分,关于运行我使用字典解决的对象的方法(类似于:obj_names = {"chair1" : chair1, "chair2" : chair2, "chair3 : chair3}而不是尝试使用global()函数。正如其他问题所推荐的那样,这是最pythonic的方法。第一部分也可以用字典解决,比如如果对象不存在则设置obj_names[i] = 0

顺便说一下,对于我的特殊问题,我不需要超过10把椅子,所以使用字典并不是一个糟糕的选择。但是如果定义问题以便椅子的数量可以是任何int,那么使用像global()这样的东西会更合乎逻辑。

2 个答案:

答案 0 :(得分:1)

尝试hasattr()

# module2.py
import module1

if hasattr(module1, "chair1"):
    module1.chair1.carve()

答案 1 :(得分:0)

您可以使用video

if "chair1" in dir(module1):
    ...