我想从不同的类中调用python中的方法,如下所示:
class foo():
def bar(name):
return 'hello %s' % name
def hello(name):
a = foo().bar(name)
return a
hello('world')将返回'Hello World'。我知道我在这里做错了什么,有谁知道它是什么?我认为这可能是我处理课程的方式,但我还没有理解它。
答案 0 :(得分:6)
在Python中,非静态方法明确地将self
作为第一个参数。
foo.bar()
要么是静态方法:
class foo():
@staticmethod
def bar(name):
return 'hello %s' % name
或必须将self
作为其第一个参数:
class foo():
def bar(self, name):
return 'hello %s' % name
在您的代码中,name
被解释为self
参数(恰好被称为其他参数)。当您调用foo().bar(name)
时,Python会尝试将两个参数(self
和name
)传递给foo.bar()
,但该方法只需要一个。
答案 1 :(得分:3)
您缺少方法定义中的instance参数:
class foo():
def bar(self, name):
return 'hello %s' % name
或者如果您不打算使用foo
实例的任何部分,则将该方法声明为静态方法。差异here之间有一个很好的解释。
答案 2 :(得分:3)
如果它应该是一个类方法,那么你应该使用classmethod
装饰器和cls
参数bar
。但在这种情况下这没有任何意义,所以你可能想要一个staticmethod
。
答案 3 :(得分:3)
您错过了实例参数,通常名为self
:
class foo():
def bar(self, name):
return 'hello %s' % name