它设置为导入模块的绝对名称。如果将其导入为foo.bar
,则__name__
设置为'foo.bar'
。
名称是在import.c
模块中确定的,但是由于该模块处理各种不同类型的导入(包括zip导入,仅字节码的导入和扩展模块),因此有多个 代码路径可用于查找。
通常,import
语句会转换为对的调用__import__
,默认情况下会实现为对的调用PyImport_ImportModuleLevelObject
。请参阅__import__()
文档以了解参数的含义。在PyImport_ImportModuleLevelObject
相对名称中已解析,因此您可以根据需要name
跟踪那里的变量。
该模块的其余部分通过PyImport_AddModuleObject
创建实际的名称空间对象和设置name
键来处理实际的导入,但是您可以将该name
值追溯到PyImport_ImportModuleLevelObject
。通过创建模块对象,可以__name__
在moduleobject.c
对象构造函数中设置其值。