Создание подкласса __dir__ в модуле Python

Начиная с Python 3.7 можно определить __dir__() в модуле. Но что, если вы хотите взять обычный вывод dir(module) и добавить или удалить его?

Например, я хотел бы сделать что-то вроде этого:

def __dir__():
    dir_out = super().__dir__()[:]  # does not work
    dir_out.pop('Optional')  # get rid of the typing imports
    return dir_out

Очевидно, поскольку модуль не является обычным классом, вызов super() не работает. Но есть ли другой способ?


person Michael Scott Cuthbert    schedule 05.02.2021    source источник


Ответы (1)


Используйте команду globals(), чтобы получить то, что обычно отображается в каталоге:

def __dir__():
    dir_out = list(globals()) 
    dir_out.pop('Optional')  # get rid of the typing imports
    return dir_out
person Michael Scott Cuthbert    schedule 05.02.2021
comment
Выяснил это непосредственно перед публикацией Q - хотя это другой вопрос, ответ на stackoverflow.com/questions/61984376/ помогло) - person Michael Scott Cuthbert; 05.02.2021