【问题标题】:How to distinguish package, module, class, function in python importpython导入中如何区分包、模块、类、函数
【发布时间】:2018-03-24 03:25:40
【问题描述】:

使用有效的python源文件,是否可以在下面的import语句中判断c的性质?

from a.b import c

比如c是包、模块、类、变量还是函数? ast 模块会帮助这项任务吗?进一步研究c 的用法有帮助吗?

或者我们必须执行这个语句并查看c 的属性来判断?

这样做的动机是对代码库进行一些分析,以了解哪些包/模块被大量使用,以及文件之间是如何相互关联的。

【问题讨论】:

  • 不可能静态知道,必须检查语句的执行结果
  • Hack:如果c.__file__ 没有给你AttributeError 那么它就是一个模块
  • 如果c不是模块,那么可以使用type(c)进行测试

标签: python python-import


【解决方案1】:

如果您正在做的只是收集有关包/模块使用情况的一些数据,您可以使用 type(..) 了解有关 c 的一些信息,但我不建议将其用于任何生产代码。

例如,

>>> from random import randint
>>> type(randint)
<class 'method'>
>>> import random
>>> type(random)
<class 'module'>
>>> def a():
...     print()
...
>>> type(a)
<class 'function'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多