Как получить точечную нотацию модуля python?

71
8

Я пишу настраиваемое поле модели django, которое выполняет операции сериализации и несериализации, при unserialize, я использую import_by_path для получения класса и инициализации экземпляра.

Напротив, мне нужно сериализовать экземпляр в базу данных, в моем случае все, что мне нужно, чтобы получить точечную нотацию модуля.

Я спрашиваю, как я могу, например, у меня есть модуль datetime

from datetime import datetime

как выводить datetime в точечной нотации в строку "datetime.datetime"?

спросил(а) 2014-04-02T04:55:00+04:00 6 лет, 6 месяцев назад
1
Решение
115

Не совсем понятно, что вы просите, но точечная нотация эквивалентна вашему приведенному выше примеру в 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'>

Изменение: после просмотра пояснения это должно быть сделано с помощью модуля inspect python. В частности, если вы пытаетесь получить модуль, который определяет определенный класс:

import inspect
import datetime

inspect.getmodule(datetime).__name__

или

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

в более общем виде вы можете получить модуль

ответил(а) 2014-04-02T04:58:00+04:00 6 лет, 6 месяцев назад
41

import inspect

from datetime import datetime

inspect.getmro(datetime)[0]

Это должно возвращать 'datetime.dateime'

ответил(а) 2017-07-07T04:25:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема