Python继承问题

Python继承问题,python,Python,我在做游戏,我有一些问题。。。我有一个加载地图的函数(通常在玩家与大门碰撞时)。我有两个门和两张地图(每张地图上有一个门)。当我走到一个门时,第二张地图被载入,当我穿过该地图上的一个门时,第一张地图被载入。我在第一张地图上还有一棵树。除非我点击那棵树,否则一切正常。这是非常奇怪的,因为我没有任何处理它的方法!什么都不应该发生!事实上,什么也没发生,除了当我试图从第二张地图回来时,它不起作用 这是我一直收到的错误消息: Traceback (most recent call last): File

我在做游戏,我有一些问题。。。我有一个加载地图的函数(通常在玩家与大门碰撞时)。我有两个门和两张地图(每张地图上有一个门)。当我走到一个门时,第二张地图被载入,当我穿过该地图上的一个门时,第一张地图被载入。我在第一张地图上还有一棵树。除非我点击那棵树,否则一切正常。这是非常奇怪的,因为我没有任何处理它的方法!什么都不应该发生!事实上,什么也没发生,除了当我试图从第二张地图回来时,它不起作用

这是我一直收到的错误消息:

Traceback (most recent call last):
File "guilds.py", line 820, in <module>
load_map(objekt.gate_path, objekt.name, False)
File "guilds.py", line 287, in load_map
npc(o[1], o[3])
File "guilds.py", line 147, in __init__
creature.__init__(self, pos, name)
TypeError: __init__() takes exactly 3 arguments (4 given)
b) NPC继承自的生物:

class creature():
     def __init__(self, pos, name):
          self.pic = []
          self.lista_slika = crt.crt[name]['ls_slk']
          for slika in self.lista_slika:
               self.pic.append(pygame.image.load(slika).convert()) #load the image

          for slika in self.pic:
               self.colorkey = slika.get_at((0,0)) #get the colokey from the first pixel (0,0)
               slika.set_colorkey(self.colorkey, RLEACCEL)

          self.counter = int(time.time())
          self.time = int(time.time())
          self.pos = pos
          self.rect = self.pic[0].get_rect() #get image rectangle
          self.rect = self.rect.move(self.pos) #get the rectangle on the starting position
          self.current_health = crt.crt[name]['health']
          self.max_health = crt.crt[name]['health']
          self.name = name
          self.targeted = False
          self.targeted_3 = False
          lista_creature.append(self)


     def follow(self):
          if self.face == 0:
               self.rect = self.rect.move(NPCspeed_right)
               self.pos = (self.pos[0] + NPCspeed_right[0], self.pos[1] + NPCspeed_right[1])
          if self.face == 1:     
               self.rect = self.rect.move(NPCspeed_left)
               self.pos = (self.pos[0] + NPCspeed_left[0], self.pos[1] + NPCspeed_left[1])

          if self.face == 2:     
               self.rect = self.rect.move(NPCspeed_up)
               self.pos = (self.pos[0] + NPCspeed_up[0], self.pos[1] + NPCspeed_up[1])
          if self.face == 3:     
               self.rect = self.rect.move(NPCspeed_down)
               self.pos = (self.pos[0] + NPCspeed_down[0], self.pos[1] + NPCspeed_down[1])


     def die(self):     
          self.randin = random.randint(-100, 100)
          self.randin2 = random.randint(-100, 100)
          self.pos = (self.pos[0] + self.randin, self.pos[1] + self.randin2)
          self.combat = False
          self.current_health = self.max_health
          self.rect.move_ip(self.randin, self.randin2)
          self.targeted = False

          for quest in lista_quest:
               if quest.target_name == self.name and quest.onit == True:
                    quest.goal -= 1

你有一个全局变量“bioture”,它隐藏着你的类。

你能在异常抛出的地方发布一些来自
guilds.py
的代码吗?你能在呼叫ctor之前打印出
self、pos、name
吗?你粘贴的代码看起来不错,你确定这是正确的代码吗?回溯中标记了哪些行?实际上我不确定,我以为这是代码中的某个东西。。。奇怪,你能和我联系吗?这样我就可以给你发更多的代码了?yanncore@gmail.comIn哪一班?我看不出来。。。联系我yanncore@gmail.com请:)别客气,+1@Yann:你可能有一个全局变量定义为
bioter=bioter()
——它不在你给我们看的代码中,所以我们不能告诉你在哪里。顺便说一下,类名应该是大写的,部分是为了避免这个问题。我爱你,伙计!这是真的!有一个所有生物的列表,我这样做了:对于l_生物中的生物:所以我把单词“生物”改为“crtr”,现在它可以工作了!如果这是标准的话,我会马上开始重命名我的类。那么第一个字母应该是大写的?如果它不止一个词,那么它是像这个人熊猪一样的东西?再次感谢@Yann:有关命名约定和其他编码样式的指导,请参阅。@Yann:呵呵,很高兴能为您提供帮助。你不知道这种事发生在我身上的频率有多高。现在我把我所有的类都这样命名(没有一个变量)。如果有一个类(比如“object”)与此不同,我会开始感到不安;-)
class creature():
     def __init__(self, pos, name):
          self.pic = []
          self.lista_slika = crt.crt[name]['ls_slk']
          for slika in self.lista_slika:
               self.pic.append(pygame.image.load(slika).convert()) #load the image

          for slika in self.pic:
               self.colorkey = slika.get_at((0,0)) #get the colokey from the first pixel (0,0)
               slika.set_colorkey(self.colorkey, RLEACCEL)

          self.counter = int(time.time())
          self.time = int(time.time())
          self.pos = pos
          self.rect = self.pic[0].get_rect() #get image rectangle
          self.rect = self.rect.move(self.pos) #get the rectangle on the starting position
          self.current_health = crt.crt[name]['health']
          self.max_health = crt.crt[name]['health']
          self.name = name
          self.targeted = False
          self.targeted_3 = False
          lista_creature.append(self)


     def follow(self):
          if self.face == 0:
               self.rect = self.rect.move(NPCspeed_right)
               self.pos = (self.pos[0] + NPCspeed_right[0], self.pos[1] + NPCspeed_right[1])
          if self.face == 1:     
               self.rect = self.rect.move(NPCspeed_left)
               self.pos = (self.pos[0] + NPCspeed_left[0], self.pos[1] + NPCspeed_left[1])

          if self.face == 2:     
               self.rect = self.rect.move(NPCspeed_up)
               self.pos = (self.pos[0] + NPCspeed_up[0], self.pos[1] + NPCspeed_up[1])
          if self.face == 3:     
               self.rect = self.rect.move(NPCspeed_down)
               self.pos = (self.pos[0] + NPCspeed_down[0], self.pos[1] + NPCspeed_down[1])


     def die(self):     
          self.randin = random.randint(-100, 100)
          self.randin2 = random.randint(-100, 100)
          self.pos = (self.pos[0] + self.randin, self.pos[1] + self.randin2)
          self.combat = False
          self.current_health = self.max_health
          self.rect.move_ip(self.randin, self.randin2)
          self.targeted = False

          for quest in lista_quest:
               if quest.target_name == self.name and quest.onit == True:
                    quest.goal -= 1