如何检测Python变量是否为将来的导入

如何检测Python变量是否为将来的导入,python,Python,我们如何检测Python变量是否是从\uuuuu future\uuuu导入的 我注意到它是一个类,具体地说是,\uuuuuuuuuuuuuuuuuu.\ufeature()。然而,所有导入该类的尝试似乎都失败了 type()返回 我尝试获取\u功能类: >>> from __future__ import absolute_import >>> absolute_import _Feature((2, 5, 0, 'alpha', 1), (3, 0, 0

我们如何检测Python变量是否是从
\uuuuu future\uuuu
导入的

我注意到它是一个类,具体地说是,
\uuuuuuuuuuuuuuuuuu.\ufeature()
。然而,所有导入该类的尝试似乎都失败了

type()
返回

我尝试获取
\u功能
类:

>>> from __future__ import absolute_import

>>> absolute_import
_Feature((2, 5, 0, 'alpha', 1), (3, 0, 0, 'alpha', 0), 16384)

>>> type(abolute_import)
<class '__future__._Feature'>

>>> from __future__ import _Feature
SyntaxError: future feature _Feature is not defined

>>> import __future__._Feature
ImportError: No module named '__future__._Feature'; '__future__' is not a package

>>>
>>来自未来导入绝对导入
>>>绝对进口
_特征((2,5,0,'alpha',1),(3,0,0,'alpha',0),16384)
>>>类型(abolute_导入)
>>>来自未来导入功能
语法错误:未定义未来功能\u功能
>>>导入未来功能
ImportError:没有名为“\uuuu future\uuuu.\u Feature”的模块__“未来”不是一个包
>>>

方法是从已知的“\u功能”中提取类型,并使用该类型:

from __future__ import division
Feature = type(division)

from __future__ import unicode_literals
isinstance(unicode_literals, Feature)
(正确)

这看起来可能是一种“黑客行为”——但实际上这是一种检索本地代码中定义的两个类的方法,这些类不可直接导入。更有用的
FunctionType
可以使用
从类型导入FunctionType
导入,但是如果打开
类型
模块的Python文件,您将看到它被声明为类似这样的内容:
FunctionType=type(lambda:None)

也就是说,我想知道您检查
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu未来导入的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu功能类型的动机是什么-这些大部分都是占位符,以便可以。更改
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。
您当然可以从模块中删除这些
\u功能
对象,并且该功能本身仍将为该模块启用-

>>> from __future__ import division
>>> del division
>>> 5 / 2
2.5

动机:它试图在一个包中列出模块,不包括stdlib(一个已解决的问题)和
\uuuu future\uuuu
导入。