
With a.class_foo, a is not bound to class_foo, rather the class A is bound to class_foo. That is what is meant by the term "bound" below: print(a.foo)

foo expects 2 arguments, while a.foo only expects 1 argument.Ī is bound to foo. You get a "partially applied" version of the function with the object instance a bound as the first argument to the function. Staticmethods are used to group functions which have some logical connection with a class to the class.įoo is just a function, but when you call a.foo you don't just get the function, They behave like plain functions except that you can call them from an instance or the class: a.static_foo(1) With staticmethods, neither self (the object instance) nor cls (the class) is implicitly passed as the first argument. One use people have found for class methods is to create inheritable alternative constructors. A.foo(1) would have raised a TypeError, but A.class_foo(1) works just fine: A.class_foo(1) In fact, if you define something to beĪ classmethod, it is probably because you intend to call it from the class rather than from a class instance. You can also call class_foo using the class. With classmethods, the class of the object instance is implicitly passed as the first argument instead of self. The object instance, a, is implicitly passed as the first argument. Print(f"executing foo(, static_foo(x):īelow is the usual way an object instance calls a method. Maybe a bit of example code will help: Notice the difference in the call signatures of foo, class_foo and static_foo: class A(object):
