如何获取Python模块的点表示法?
我正在写一个自定义的 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__
更一般地说,你可以获取模块