这段代码:
class testclass:
def __init__(self,x,y):
self.x = x
self.y = y
self.test()
def test():
print('test')
if __name__ == '__main__':
x = testclass(2,3)
yields:
Error:
TypeError:test() takes no argument(1 given)
我在没有任何参数的情况下调用测试函数,为什么错误说我已经给了一个?
您将这些方法称为self.test()
。你应该在心里把它翻译成test(self)
找出函数定义中如何“接收”调用。你的定义test
然而很简单def test()
,其中没有位置self
去,所以你会得到你观察到的错误。
为什么会这样呢?因为Python只能在明确给出要查找的对象时查找属性(并且查找属性包括方法调用)。因此,为了使该方法执行取决于调用它的对象的任何操作,它需要以某种方式接收该对象。接收它的机制是将其作为第一个参数。
可以告诉 Pythontest
实际上并不需要self
无论如何,使用staticmethod
装饰师。在这种情况下,Python 知道该方法不需要self
,所以它不会尝试将其添加为第一个参数。所以以下任一定义test
将解决你的问题:
def test(self):
print('test')
OR:
@staticmethod
def test():
print('test')
请注意,这仅与对象上调用的方法有关(它总是看起来像some_object.some_method(...)
)。正常的函数调用(看起来像function(...)
)“点左边”没有任何东西,所以没有self
,所以不会自动通过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)