Joshua Kordani wrote: > Greetings all! > > So I'm reading through the manual and I get to the point where it talks > about packages and how to import them. namely section 6.4 in the > tutorial. I wont repeat the section here, but I want to understand > whats going on in the following (as typed on my computer). > > Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit > (Intel)] on > win32 > Type "help", "copyright", "credits" or "license" for more information. >>>> import datetime >>>> dir(datetime) > ['MAXYEAR', 'MINYEAR', '__doc__', '__name__', '__package__', 'date', > 'datetime', > 'datetime_CAPI', 'time', 'timedelta', 'tzinfo'] >>>> dir(datetime.datetime) > ['__add__', '__class__', '__delattr__', '__doc__', '__eq__', > '__format__', '__ge > __', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', > '__lt__', ' > __ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', > '__repr__', '__rs > ub__', '__setattr__', '__sizeof__', '__str__', '__sub__', > '__subclasshook__', 'a > stimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fromordinal', > 'fromtimest > amp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', > 'microsecond', 'm > in', 'minute', 'month', 'now', 'replace', 'resolution', 'second', > 'strftime', 's > trptime', 'time', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', > 'tzname > ', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', > 'year'] > >>>> from datetime.datetime import today > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > ImportError: No module named datetime >>>> > > so dir on datetime shows symbols date, time, datetime,etc > dir on datetime shows today, now, etc > > lets say for arguments sake that I want to just import the today > function, according to the documentation, the line should be: > from datetime.datetime import today. > > as you can see, that didn't work. why not? >
Because datetime is a module, but datetime.datetime is a class. You can import individual names from a module, but a class is a monolithic all-or-nothing chunk. There's the potential for confusion because Python also has "packages", which are like modules but more structured: you can import a module from a package: >>> from xml import etree or import the package module directly: >>> import xml.etree) You can also import a submodule from the module: >>> from xml.etree import cElementTree or import the submodule directly >>> import xml.etree.cElementTree You can even import a class from the submodule: >>> from xml.etree.cElementTree import Element but what you *can't* do is import the submodule's class directly: >>> import xml.etree.cElementTree.Element Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named Element However, what you did was import the datetime module (which is not a package, and does not therefore contains submodules), and reference the datetime class within that module (datetime.datetime), which is all OK. But datetime.datetime is a class, not a module, so you can't import anything from it. Neither can you import it directly: >>> import datetime.datetime Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named datetime (in the last line, the name "datetime" refers to the class, not themodule. Hope this helps. You may learn a bit more by actually looking at the source of the module, which probably lives in C:\Python26\Lib\datetime.py regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 PyCon is coming! Atlanta, Feb 2010 http://us.pycon.org/ Holden Web LLC http://www.holdenweb.com/ UPCOMING EVENTS: http://holdenweb.eventbrite.com/ -- http://mail.python.org/mailman/listinfo/python-list