繁体   English   中英

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

[英]How to check if arbitrary class instance exists and call its method from another module?

可以说我有两个模块module1module2module1可以有对象chair1chair2chair3 我想检查是否存在来自module2的那些对象之一,以及是否确实存在来自module2 就像是:

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

这显然是chair1 ,因为chair1chair2chair3不在module2 globals()

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

编辑:

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

顺便说一句,对于我的特殊问题,我不需要超过10把椅子,因此使用字典并不是一个坏选择。 但是,如果定义了问题以使椅子的数量可以是任意整数,那么使用诸如global()类的东西将更合乎逻辑。

试试hasattr()

# module2.py
import module1

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

您可以使用dir

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM