Questions on "import" and "datetime"
Yunfei Dai
yunfei.dai.sigma at gmail.com
Wed Jun 12 06:41:12 EDT 2013
On Monday, June 10, 2013 9:10:16 PM UTC+2, Dave Angel wrote:
> On 06/10/2013 01:01 PM, Zachary Ware wrote:
>
> > On Mon, Jun 10, 2013 at 10:37 AM, Yunfei Dai <yunfei.dai.sigma at gmail.com> wrote:
>
> >> Hi all,
>
> >
>
> > Hi Yunfei,
>
> >
>
> >>
>
> >> I have some questions on "import":
>
> >>
>
> >> 1."from datetime import datetime" works well. But I am confused why "import datetime.datetime" leads to importerror. "from xlrd import open_workbook" could be replaced by "from xlrd.open_workbook" without any problem.
>
> >
>
>
>
> It's a historical flaw in datetime that the class has the same name as
>
> the module it's in. It should have been called class Datetime
>
> (according to pep 10, class names should be capitalized). If that were
>
> the case, it'd be clear that datetime.Datetime is a class.
>
>
>
> It would also be clearer that
>
> from datetime import Datetime
>
>
>
> creates an alias in the present global namespace for the
>
> datetime.Datetime class, as simply Datetime.
>
>
>
> This class has attributes that you can access, like Datetime.hour, and
>
> it has static methods like Datetime.fromTimeStamp().
>
> And like all classes, it's "callable", meaning that you can create an
>
> instance by pretending it's a function:
>
> obj = Datetime(2013, 12, 1)
>
>
>
> But since it's not a module inside a package, you can't use the form:
>
>
>
> import datetime.Datetime
>
>
>
> Now, just interpret all the above with a lowercase "D" and the confusion
>
> becomes clearer. The compiler/interpreter doesn't care either way.
>
>
>
> <SNIP>
>
> > "from ... import ..." imports an object from a module and assigns it
>
> > to a local name that is the same as the name in the other module. In
>
> > other words, the following two examples do the same thing:
>
> >
>
> > from foo import bar
>
> >
>
> > import foo;bar = foo.bar
>
> >
>
> > If foo.bar happens to be a module (module 'bar' in package 'foo'), you
>
> > could also do this:
>
> >
>
> > import foo.bar as bar
>
> >
>
> > ...and that restriction is where your problem lies.
>
> >
>
>
>
> In other words, since datetime.datetime is a class, not a module, you
>
> can't just import it.
>
>
>
> <SNIP>
>
> >
>
> >> 2.I am also comfused that "datetime.datetime" is a function but whithin "datetime.datetime" there are lots of other functions. So what is the type of "datetime.datetime" on earth? is it a function, or a class or a folder(library) here?
>
> >
>
>
>
> As I said before, datetime.datetime is a class, and the functions within
>
> it are called methods.
>
>
>
> You can see it all for yourself very easily. Use the __file__ attribute
>
> to locate the source for datetime module on your system. Here's what it
>
> looks like on mine:
>
>
>
> >>> import datetime
>
> >>> datetime.__file__
>
> '/usr/local/lib/python3.3/datetime.py'
>
>
>
> Then you can go look at that file. For my copy, the datetime class
>
> begins at 1301. But you can just search for the following line:
>
>
>
>
>
>
>
> class datetime(date):
>
>
>
> HTH
>
>
>
> --
>
> DaveA
Thank you Dave for your reply! It is very helpful.
More information about the Python-list
mailing list