[英]How to check if arbitrary class instance exists and call its method from another module?
可以說我有兩個模塊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
,因為chair1
, chair2
和chair3
不在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.