问题在于,传递给python中类方法的第一个参数始终是在其上调用该方法的类实例的副本,通常标记为self
。如果这样声明了该类:
class foo(object):
def foodo(self, thing=None, thong='not underwear'):
print thing if thing else "nothing"
print 'a thong is',thong
它的行为符合预期。
如果不self
作为第一个参数,则在myfoo.foodo(thing="something")
执行时,将foodo
使用arguments调用该方法(myfoo, thing="something")
。myfoo
然后将该实例分配给thing
(因为thing
是第一个声明的参数),但是python也会尝试分配"something"
给thing
,因此是Exception。
为了演示,请尝试使用原始代码运行它:
myfoo.foodo("something")
print
print myfoo
您将输出如下:
<__main__.foo object at 0x321c290>
a thong is something
<__main__.foo object at 0x321c290>