Импорт классов из разных файлов в подкаталог

Вам нужны вызов статистики и имя файла:

my $last_mod_time = (stat ($file))[9];

Perl также имеет другую версию:

my $last_mod_time = -M $file;

, но то значение относительно когда запущенная программа. Это полезно для вещей как сортировка, но Вы, вероятно, хотите первую версию.

24
задан martineau 11 January 2017 в 22:34
поделиться

2 ответа

Я знаю, что прошло пару месяцев с тех пор, как на этот вопрос был дан ответ, но я искал то же самое и наткнулся на эту страницу. Я не был очень доволен выбранным ответом, поэтому я написал свое собственное решение и решил поделиться им. Вот что я придумал:

# NOTE: The function name starts with an underscore so it doesn't get deleted by iself
def _load_modules(attr_filter=None):
    import os

    curdir = os.path.dirname(__file__)
    imports = [os.path.splitext(fname)[0] for fname in os.listdir(curdir) if fname.endswith(".py")]

    pubattrs = {}
    for mod_name in imports:
        mod = __import__(mod_name, globals(), locals(), ['*'], -1)

        for attr in mod.__dict__:
            if not attr.startswith('_') and (not attr_filter or attr_filter(mod_name, attr)):
                pubattrs[attr] = getattr(mod, attr)

    # Restore the global namespace to it's initial state
    for var in globals().copy():
        if not var.startswith('_'):
            del globals()[var]

    # Update the global namespace with the specific items we want
    globals().update(pubattrs)

# EXAMPLE: Only load classes that end with "Resource"
_load_modules(attr_filter=lambda mod, attr: True if attr.endswith("Resource") else False)
del _load_modules # Keep the namespace clean

Это просто импортирует * из всех файлов .py в каталоге пакета, а затем только перетягивает общедоступные в глобальное пространство имен. Кроме того, он позволяет фильтровать, если желательны только определенные общедоступные атрибуты.

5
ответ дан 29 November 2019 в 00:19
поделиться
from subdir.* import *

Вы не можете использовать «*» таким образом непосредственно после оператора «от». Вам нужно эксплицировать импорт. Пожалуйста, сверьтесь с документацией Python об импорте и пакетах.

-2
ответ дан 29 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: