Как проверить, существует ли произвольный экземпляр класса и вызвать его метод из другого модуля? - PullRequest
0 голосов
/ 29 мая 2018

Допустим, у меня есть два модуля 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() было бы более логичным.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Попробуйте hasattr():

# module2.py
import module1

if hasattr(module1, "chair1"):
    module1.chair1.carve()
0 голосов
/ 29 мая 2018

Вы можете использовать dir:

if "chair1" in dir(module1):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...