Допустим, у меня есть два модуля 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
Что является лучшимподход к решению этой проблемы?
РЕДАКТИРОВАТЬ:
Ответ Роба (hasattr()
) решает проблему проверки, существует ли объект в другом модуле.Вторая часть, о запуске методов на объектах, которые я решил, используя словарь (что-то вроде: obj_names = {"chair1" : chair1, "chair2" : chair2, "chair3 : chair3}
вместо того, чтобы пытаться использовать функцию global()
. Как рекомендуется для некоторых других вопросов, это наиболее питонический подход. Первая часть также может быть решенасо словарем, например, установка obj_names[i] = 0
, если объект не существует.
Кстати, для моей конкретной проблемы мне не понадобится более 10 стульев, поэтому использование словаря не является плохим вариантом. Но еслипроблема была определена так, чтобы число стульев могло быть любым целым, чем использование чего-то вроде global()
было бы более логичным.