2015-06-05 2 views
-3

Есть ли простой способ проверить python, если класс определен? Даже если вам известно расположение файла модуля .py, где должен быть определен класс.Проверить, существует ли класс python в исходном коде

Предположим, что у меня есть эти файлы file1.py, где я пытаюсь проверить, определен ли Class1 в файле file2.py. И file3.py, где я определил второй класс Class2.

в file1.py, у меня есть этот код:

try: 
     modulePath = os.sep.join([cwd,os.sep.join(factory.split(".")[0:-1])]) + ".py" 
     moduleName = factory.split(".")[-2] 
     className = factory.split(".")[-1] 
     m = imp.load_source(moduleName, modulePath) 
     c = getattr(m, className) 
    except: 
     raise ValueError('Factory Path not correctly specified') 

где

factory = <string as path to the class 1> # for example com.Class1 
cwd = os.getcwd() # i.e. current working directory 

в file2.py

`` `

from . import Class2 

Class1(object): 
    def __init__(self): 
     self.object2 = Class2() 

в file3. py

`` `

Class2(object): 
    def __init__(self): 
     pass 

В основном, как file2.py модули и file3.py не установлены, код в file1 вызовет ошибку, как чертенок не может найти Class2. Я пытался с и без относительного импорта без успеха ...

+0

Не могли бы вы объяснить, что вы имеете в виду? У вас есть два файла python? Тот, который содержит классы (ы), которые вы хотите проверить, существует? – Kris

+1

как не установлен не установлен? –

+0

, вероятно, не нравится путь, который вы пытаетесь дать. Попробуйте использовать 'os.path.abspath (". ")' Для значения 'cwd' – Tommy

ответ

1

Если вы знаете, где находится класс, и если модуль, содержащий класс, находится в пути python, вы можете просто обернуть импорт этого класса в try блок

try: 
    import MyClass 
    #or 
    from my_module import MyClass 
except ImportError: 
    #raise an exception or log a warning of some sort 
Смежные вопросы