python调用类下的方法报错

Python写了下面的代码:

class Human: def saytell, text: print @%s %s % tell, text p = Human
p.sayPaul, hello

运行后报错,提示:

Traceback most recent call last: File "Untitled.py", line 6, in <module> p.sayPaul, hello
TypeError: say takes exactly 2 arguments 3 given

可是我的 say 只有两个参数啊

类中的method必须附带一个参数self,它会在你调用的时候被解释器隐式传入
定义成这样

def sayself,tell, text: print @%s %s % tell, text

如果你需要让它成为一个类方法而不是实例方法,可以用staticmethod装饰器来装饰它
贴哥示例你看下,参数是如何隐式传递的

class Testobject: @staticmethod def foo: print "foo" def barself: print "bar" t = Test
Test.bart
t.bar
t.foo
Test.foo

具体的,@蓝皮鼠 已经说的很清楚了!我想补充一下,self参数其实就是实例本身。python为每一个非静态方法绑定到相应的实例中,但是self并不是python的关键字
所以,你可以将self替换为任何合法的名字。

class Human: def sayTedd,tell, text: print @%s %s % tell, text p = Human
p.sayPaul, hello

所以,其实上面的self参数就是实例本身就有点不妥了,我觉得应该这样说:非静态方法的第一个参数是实例本身。

发表评论

电子邮件地址不会被公开。 必填项已用*标注