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

5 投票
2 回答
4626 浏览
提问于 2025-04-18 00:57

我正在写一个自定义的 Django 模型字段,这个字段需要进行序列化和反序列化操作。在反序列化的时候,我使用了一个叫做 import_by_path 的工具来获取类并初始化一个实例。

相反的,当我需要把一个实例保存到数据库时,我只需要获取模块的点表示法。

我想问的是,比如我有一个 datetime 模块,

from datetime import datetime

我该如何把 datetime 输出成点表示法的字符串 "datetime.datetime" 呢?

2 个回答

0
import inspect

from datetime import datetime


inspect.getmro(datetime)[0]

这应该返回 'datetime.dateime'

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__

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

撰写回答