如何获得Python模块的点表示法?

5
我正在编写一个自定义的 Django 模型字段,其中包含序列化和反序列化操作。在反序列化时,我使用import_by_path来获取类并初始化一个实例。
相反,在我的情况下,我需要将一个实例序列化到数据库中,我只需要获取模块的点符号表示方式即可。
我的问题是,如果我有一个 datetime 模块,如何做到这一点?
from datetime import datetime

如何将点表示法的 datetime 输出为字符串 "datetime.datetime"
提示:使用 strftime() 方法。

可能是获取Python对象的完全限定类名的重复问题。 - BrenBarn
2个回答

10

不太清楚你的问题是什么,但是在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__

更一般地说,您可以获取该模块


1
嗨,我不是在问如何导入模块,我正在尝试获取模块的点表示法。 - James Lin
@JamesLin 哦,我明白了。现在更新。 - Slater Victoroff
from datetime import datetime datetime.module+'.'+datetime.class.name 'datetime.type' 无法给出 'datetime.datetime'
- James Lin
从datetime导入datetime
inspect.getmodule(datetime).name 'datetime',但我希望看到'datetime.datetime'
- James Lin
@JamesLin 没错,你只需要在模块名称后面加上一个点即可。 - Slater Victoroff
显示剩余2条评论

0
import inspect

from datetime import datetime


inspect.getmro(datetime)[0]

应该返回'datetime.datetime'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接