新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个。
在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no arguments这个错误。
例如下面的程序:
class Ball: def _init_(self,color,size,direction): self.color=color self.size=size self.direction=direction def bounce(self): if self.direction=="down": self.direction="up" myBall=Ball("red","small","down") print "I just created a ball." print "My ball is",myBall.size print "My ball is",myBall.color print "My ball's direction is",myBall.direction print "Now I'm going to bounce the ball" print myBall.bounce() print "Now the ball's direction is",myBall.direction运行会报错:
======================= RESTART: H:pythonounce1.py ======================= Traceback (most recent call last): File "H:pythonounce1.py", line 11, in <module> myBall=Ball("red","small","down") TypeError: this constructor takes no arguments
出错原因是,在python中构造函数书写格式是__init__,而不是_init_,即在init两侧都是双下划线,不是单下划线。
修改后如下:
class Ball: def __init__(self,color,size,direction): self.color=color self.size=size self.direction=direction def bounce(self): if self.direction=="down": self.direction="up" myBall=Ball("red","small","down") print "I just created a ball." print "My ball is",myBall.size print "My ball is",myBall.color print "My ball's direction is",myBall.direction print "Now I'm going to bounce the ball" print myBall.bounce() print "Now the ball's direction is",myBall.direction
这是正确的运行结果:
======================= RESTART: H:pythonounce1.py ======================= I just created a ball. My ball is small My ball is red My ball's direction is down Now I'm going to bounce the ball Now the ball's direction is up