在 Python 模块上子类化 __dir__

问题描述

从 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() 调用不起作用。但是还有别的方法吗?

解决方法

使用 globals() 命令获取通常会出现在目录中的内容:

def __dir__():
    dir_out = list(globals()) 
    dir_out.pop('Optional')  # get rid of the typing imports
    return dir_out

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...