Python类方法报错:Bullet.display()需0参却传入1个的原因解析
TypeError报错原因解析
这个错误的本质是违反了Python类实例方法的定义规则:
当你通过bullet.display()这种实例对象调用方法的方式执行代码时,Python会自动把当前的bullet实例作为第一个参数传递给display方法,但你定义的display()方法没有声明任何参数来接收这个自动传入的实例,因此触发了"takes 0 positional arguments but 1 was given"的类型错误。
另外补充一点:你在display里直接用Bullet.x、Bullet.y访问的是类的静态属性,但实际场景中每个子弹实例应该有自己独立的坐标属性,正确的写法应该用实例自身的属性。
正确的写法
修改display方法,添加self参数(这是Python实例方法的必填参数,用来指代当前实例),同时把类属性访问改为实例属性访问:
class Bullet: ... def display(self): pg.draw.circle(screen, blue, (self.x, self.y), 2)
这样调用bullet.display()时,Python会自动把bullet实例传入self,方法就能正确获取当前子弹的坐标并绘制了。
内容的提问来源于stack exchange,提问作者Lê Trần Nam Khánh
相关产品推荐
相关产品推荐

