【问题标题】:How to get a dot notation of a python module?如何获得python模块的点符号?
【发布时间】:2014-05-13 01:37:25
【问题描述】:

我正在编写一个具有序列化和反序列化操作的自定义 django 模型字段,在反序列化时,我使用 import_by_path 获取类并初始化实例。

相反,我需要将一个实例序列化到数据库中,就我而言,我只需要获取模块的点符号。

我要问的是,我怎么能,例如我有 datetime 模块

from datetime import datetime

如何将点符号的datetime 输出为字符串"datetime.datetime"

【问题讨论】:

标签: python


【解决方案1】:

不完全清楚你在问什么,但点符号相当于你上面在 Python 中的例子,例如:

import datetime
datetime.datetime

相同
from datetime import datetime
datetime

我希望这是有道理的,如果您还有任何问题,请告诉我。

这是一个更好的例子:

>>> import datetime
>>> datetime
<module 'datetime' from '/path/to/python'>
>>> from datetime import datetime
>>> datetime
<type 'datetime.datetime'>

编辑:看到澄清后,这应该使用 python inspect 模块完成。具体来说,如果您尝试获取定义特定类的模块:

import inspect
import datetime

inspect.getmodule(datetime).__name__

def dot_notation(your_module):
    return your_module.__module__ + "." + your_module.__class__.__name__

用更一般的方式,你可以得到模块

【讨论】:

  • 嗨,我在输出周围添加了字符串引号,希望这更清楚我想要实现的目标
  • 您好,我不是在问如何导入模块,而是在尝试获取模块的点符号表示。
  • @JamesLin 哦,我明白了。现在更新。
  • &gt;&gt;&gt; from datetime import datetime &gt;&gt;&gt; datetime.__module__+'.'+datetime.__class__.__name__ 'datetime.type' 不给我'datetime.datetime'
  • @JamesLin 这就是为什么我在输入 your_module 中特别调用的原因,如果它是第一个示例中的类型或对象,请使用检查模块。
【解决方案2】:
import inspect

from datetime import datetime


inspect.getmro(datetime)[0]

这应该返回'datetime.dateime'

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2012-03-23
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多