2014-12-04 2 views
0

Для классов, определенных в питона коде, inspect.getmodule работает для обоих объектов и типовinspect.getmodule невязки для DateTime

>>> import calendar 
>>> c = calendar.Calendar() 
>>> print inspect.getmodule(c) 
<module 'calendar' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/calendar.pyc'> 
>>> print inspect.getmodule(type(c)) 
<module 'calendar' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/calendar.pyc'> 

Но в случае DateTime, он не работает для объектов:

>>> import datetime 
>>> d = datetime.datetime.now() 
>>> print inspect.getmodule(d) 
None 
>>> print inspect.getmodule(type(d)) 
<module 'datetime' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/datetime.so'> 

Почему это несоответствие?

+0

Календарь() создает объект, и теперь() просто возвращает время? – chris

+0

Я не понимаю, что вы подразумеваете под этим: '>>> d = datetime.datetime.now() >>> repr (d) 'datetime.datetime (2014, 12, 3, 19, 8) , 48, 279667) ' >>> print type (d) <тип' datetime.datetime '> ' – linus

+0

Единственное отличие, которое я вижу, это то, что datetime скомпилировано в динамическую .so lib и календарь хранится как .pyc – chris

ответ

0

Модуль calendar является чистым питоном, а модуль datetime является расширением.

В соответствии с документами inspect.getmodule() предназначен для получения информации об исходном коде, поэтому он явно ограничен в том, что он может делать с объектами, созданными модулями расширения.

Смежные вопросы