class unbound method and datetime.datetime.today()

Diez B. Roggisch deets at nospam.web.de
Tue Jan 9 02:18:58 EST 2007


cinsky at gmail.com schrieb:
> Hi, I got confused when I learned the function datetime.today().
> 
> So far I learned, unless an instance is created, it is not possible to
> call the class method. For example:
> 
> class Foo:
>   def foo(self):
>     pass
> 
> Foo.foo()  # error: unbound method foo().
> 
> What makes me confused is that datetime class? in datetime module
> provides today() function that returns the datetime object.
> 
>>>> import datetime
>>>> datetime.datetime.today()
> datetime.datetime(2007, 1, 9, 15, 34, 35, 23537)
> 
> It looks like that datetime class provides today() method that can be
> callable even if it is unbound method. Do I correct?
> 
> If it is possible to make that kind of function (looks like static
> member function in C++), how can I make that?

It is called a classmethod (in contrast to an instancemethod, which is 
the usual thing), and you can do it - depending on the version of python 
you have - using the built-in funtion/decorator "classmethod". Like this:

class Foo(object):

    @classmethod
    def bar(cls):
        pass


Note that a classmethod gets passed the class as first argument, not an 
instance.

You can also create static methods, using "staticmethod". They won't get 
passed anything.

Diez



More information about the Python-list mailing list