When I run this (python 2.6.1): class C: @staticmethod def foo(): pass
print "inside", foo, callable(foo) print "outside", C.foo, callable(C.foo) I get: inside <staticmethod object at 0x421df0> False outside <function foo at 0x41e6f0> True I don't understand. Why is foo not callable inside of the class definition? Where this comes up is that I'm trying to use a callable default in mongoengine: class User(Document): @staticmethod def _get_next_id(): [blah, blah, blah] return id user_id = IntField(required=True, default=_get_next_id) The way mongoengine works is if callable(default) is true, it calls default() to get the real value to use. At the point where the IntField() call is made, _get_next_id is not callable, and eventually I end up with: ValidationError: <staticmethod object at 0x2a3c1a0> could not be converted to int -- http://mail.python.org/mailman/listinfo/python-list