Calling a class method in python

I'm looking to call a method in python from a different class like so:

class foo():
    def bar(name):
        return 'hello %s' % name

def hello(name):
    a = foo().bar(name)
    return a

Where hello('world') would return 'Hello World'. I'm aware I've done something wrong here, does anyone know what it is? I think it might be the way I'm handling the classes but I haven't got my head around it yet.


In Python, non-static methods explicitly take self as their first argument.

foo.bar() either needs to be a static method:

class foo():
    @staticmethod
    def bar(name):
        return 'hello %s' % name

or has to take self as its first argument:

class foo():
    def bar(self, name):
        return 'hello %s' % name

What happens is that in your code, name gets interpreted as the self parameter (which just happens to be called something else). When you call foo().bar(name) , Python tries to pass two arguments ( self and name ) to foo.bar() , but the method only takes one.


You are missing the instance parameter in your method definition:

class foo():
    def bar(self, name):
        return 'hello %s' % name

or if you don't intend to use any part of the foo instance declare the method as a static method. There's a nice explanation between the differences here.


If it's supposed to be a class method, then you should have used the classmethod decorator and a cls argument to bar . But that makes no sense in this case, so you might have wanted a staticmethod instead.

链接地址: http://www.djcxy.com/p/9190.html

上一篇: @ @ staticmethod可以被继承吗?

下一篇: 在python中调用一个类方法