Python newbie having a problem using classes

2019-01-28 00:20发布

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?

标签: python class
2条回答
家丑人穷心不美
2楼-- · 2019-01-28 01:14

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()
查看更多
Bombasti
3楼-- · 2019-01-28 01:16

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!

查看更多
登录 后发表回答