创建类参数时崩溃:TypeError: object() takes no parameters问题排查
问题定位与解决
兄弟,这个错误的根源一眼就能看出来——你把Python类的构造函数名字写错啦!
核心问题:构造函数拼写错误
你定义的类里写的是__int__(self, x, y, width, height, end),但Python中类的初始化构造函数应该是__init__(两个下划线+init+两个下划线)。因为你写错了名字,Python会认为这个类没有自定义的初始化方法,实例化时就会调用父类object的默认构造函数,而object()是不接受任何参数的,所以你传参数的时候就会抛出TypeError: object() takes no parameters。
额外需要修复的问题
除了构造函数的拼写,你的代码还有两个小问题:
- 构造函数内部的属性赋值没有缩进,Python是靠缩进区分代码块的,这样会直接导致语法错误;
move方法里的条件判断if self.x - self.vel > self.vel > self.path[0]逻辑混乱,应该改成if self.x + self.vel > self.path[0](因为此时self.vel是负数,self.x + self.vel等价于self.x - abs(self.vel),用来判断是否还没走到左边界)。
修正后的完整代码
import pygame class enemey(object): walkRight = [pygame.image.load('R1E.png'), pygame.image.load('R2E.png'), pygame.image.load('R3E.png'), pygame.image.load('R4E.png'), pygame.image.load('R5E.png'), pygame.image.load('R6E.png'), pygame.image.load('R7E.png'), pygame.image.load('R8E.png'), pygame.image.load('R9E.png'), pygame.image.load('R10E.png'), pygame.image.load('R11E.png')] walkLeft = [pygame.image.load('L1E.png'), pygame.image.load('L2E.png'), pygame.image.load('L3E.png'), pygame.image.load('L4E.png'), pygame.image.load('L5E.png'), pygame.image.load('L6E.png'), pygame.image.load('L7E.png'), pygame.image.load('L8E.png'), pygame.image.load('L9E.png'), pygame.image.load('L10E.png'), pygame.image.load('L11E.png')] def __init__(self, x, y, width, height, end): self.x = x self.y = y self.width = width self.height = height self.end = end self.walkCount = 0 self.vel = 3 self.path = [self.x, self.end] # change variables <- to random for random moving? Make sure to try! def draw(self, gameDisplay): self.move() if self.walkCount + 1 >= 33: self.walkCount = 0 if self.vel > 0: gameDisplay.blit(self.walkRight[self.walkCount // 3], (self.x, self.y)) self.walkCount += 1 else: # change to elif to add 3d movement gameDisplay.blit(self.walkLeft[self.walkCount // 3], (self.x, self.y)) self.walkCount += 1 def move(self): if self.vel > 0: if self.x + self.vel < self.path[1]: self.x += self.vel else: self.vel = self.vel * -1 self.walkCount = 0 else: if self.x + self.vel > self.path[0]: self.x += self.vel else: self.vel = self.vel * -1 self.walkCount = 0
现在你再调用goblin = enemey(100, 410, 64, 64, 450)就不会报错啦,记得确保pygame的图片路径正确哦!
内容的提问来源于stack exchange,提问作者KingPika
相关产品推荐
相关产品推荐

