Как проверить информацию о файле/модуле Python без использования `__file__` — возможно, в функции `__getattr__(…)` на урPython

Программы на Python
Anonymous
Как проверить информацию о файле/модуле Python без использования `__file__` — возможно, в функции `__getattr__(…)` на ур

Сообщение Anonymous »

У меня есть пакет утилит для проектов Python, которые я поддерживаю и использую. Это набор легких, распространенных инструментов для сбора мусора (например, анализ команд, управление жизненным циклом приложения, генерация документов и т. д. и т. д.). В настоящее время использовать этот материал в собственном проекте очень просто, но большинству модулей, написанных для работы с ним, требуется этот очень раздражающий шаблон, например:

Код: Выделить всё

from myproject.exporting import Exporter

# This is the irritating part:
exporter = Exporter(path=__file__)
export = exporter.decorator()

@export
def public_function(…):
""" This function has been exported, and is public. """
...

def private_function(…):
""" This function is private. """
...

# This bit does not really bother me:
__all__, __dir__ = exporter.all_and_dir()

Этот интерфейс экспортера позволяет помечать классы, функции (даже лямбды!) как общедоступные. Они добавляются к сгенерированным значениям модуля __all__ и __dir__(…), но все это помогает при создании документации и других интроспективных вещах. Однако это не главное, а именно: необходимость выполнять эту хакерскую инициализацию со значением __file__ - это бельмо на глазу. Линтеры ненавидят __file__, как и большинство людей-программистов Python. (включая меня), и в целом это кажется нестабильным и устаревшим способом ведения дел.
Есть ли способ получить значение __file__ другим способом? Я ищу способ выявить эти данные с помощью другого (надеюсь, менее хрупкого) пути.
Моя непосредственная мысль — создать функцию __getattr__(…) на уровне модуля. , поскольку я добился хороших результатов, используя их для предоставления экземпляров объектов при импорте – но независимо от того, является ли модуль __getattr__(…) лучшим инструментом или нет, я не уверен насчет какие средства интроспекции Python будут гарантированно использоваться.
Кроме того, в этом ответе содержится основная информация о значении __file__ для тех, кому интересно.

Подробнее здесь: https://stackoverflow.com/questions/786 ... le-perhaps

Вернуться в «Python»