2017-01-24 4 views
0

Возможно ли получить имя файла, содержащего класс? Переменная exporter является классом ниже.Как получить имя файла, содержащего класс?

def main(exporter): 

    v = exporter 
    print v # <__main__.Vudu object at 0x106ea5210> 
      # The class is "Vudu" and the filename that contains that class 
      # is called vudu_exporter. How would I get "vudu_exporter" ? 

Update: следующие работы, чтобы получить имя сценария, содержащего класс:

script_name = os.path.basename(inspect.getfile(v.__class__)) 
+0

'vudo.vudu_exporter .__ file__' должно содержать свое имя. – tdelaney

+0

Какой класс? Вы не показали нам никаких занятий. – user2357112

ответ

1

Вызов inspect.getfile на/функции/метода/модуля класса. Он не гарантированно работает, но он более надежный, чем просто проверка the __file__ attribute объекта (например, на Python 3.5, inspect.getfile(collections.defaultdict) работает, а collections.defaultdict.__file__ вызывает AttributeError).

Если у вас есть экземпляр, это не будет работать без преобразования в первый класс, например. inspect.getfile(type(instance)) (на Python 2, instance.__class__ может быть более надежным с классами старого стиля); он может только указать вам, где был определен класс, а не где был определен экземпляр.