TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки
Python Заметки avatar

TGINSIGHT POST

Post #333

@pythonotes

Python Заметки

Views3,430Post view count
PostedMar 303/03/2023, 09:01 AM
Post content

Post content

Как получить путь к файлу текущего класса если метод получения пути находится в родительском классе в другом файле? Например, представим такую ситуацию: # module1.py ### class BaseCls: @classmethod def get_path(cls): print(__file__) # module2.py ### from module1 import BaseCls class MainCls(BaseCls): pass Что покажет код: import module2 module2.MainCls.get_path() Мы ожидаем что путь будет к файлу module2.py, но переменная __file__ объявлена внутри файла module1.py и поэтому будет указывать именно на него. Чтобы получить правильный путь нам следует: ▫️ получить имя модуля текущего класса module_name = module2.MainCls.__module__ ▫️ найти этот модуль в списке импортированных модулей mod = sys.modules[module_name] ▫️ получить значение переменной __file__ filepath = mod. __file__ Вся эта процедура, причём для любого типа объекта, есть в функции inspect.getfile(). Так что наш метод должен выглядеть так: # module1.py import inspect class BaseCls: @classmethod def get_path(cls): print(inspect.getfile(cls)) Теперь из вызов этого метода из класса MainCls найдёт путь к файлу module2.py #tricks