tags:

views:

135

answers:

2

Im just beginning to mess around a bit with classes; however, I am running across a problem.

class MyClass(object):
    def f(self):
        return 'hello world'
print MyClass.f

The previous script is returning <unbound method MyClass.f> instead of the intended value. How do I fix this?

+7  A: 

Create an instance of your class: m = MyClass()

then use m.f() to call the function

Now you may wonder why you don't have to pass a parameter to the function (the 'self' param). It is because the instance on which you call the function is actually passed as the first parameter.

That is, MyClass.f(m) equals m.f(), where m is an instance object of class MyClass.

Good luck!

ron
Thanks for the help.
Protean
+11  A: 

MyClass.f refers to the function object f which is a property of MyClass. In your case, f is an instance method (has a self parameter) so its called on a particular instance. Its "unbound" because you're referring to f without specifying a specific class, kind of like referring to a steering wheel without a car.

You can create an instance of MyClass and call f from it like so:

x = MyClass()
x.f()

(This specifies which instance to call f from, so you can refer to instance variables and the like.)

You're using f as a static method. These methods aren't bound to a particular class, and can only reference their parameters.

A static method would be created and used like so:

class MyClass(object):
    def f():                 #no self parameter
        return 'hello world'
print MyClass.f()
CrazyJugglerDrummer
Thanks for the help.
Protean