簡體   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