2012-05-18 8 views
10
#Maps.py 
class Maps(object): 

    def __init__(self): 
     self.animals = [] 
     self.currently_occupied = {} 

    def add_animal(self, name): 
     self.animals.append(name) 
     self.currently_occupied = {robot:[0, 0]} 



#animal.py 
class Animal(object): 

    def __init__(self, name): 
     import maps 
     maps.add_animal(rbt) 
     self.name = name 


#Tproject.py 
from Animal import Animal 
Fred = Animal("Fred") 

me da este error que se ve asímétodo no unido con el ejemplo como primer argumento tiene cadena, pero requiere algo más

TypeError: add_animal método no unida() debe ser llamado con el ejemplo Maps como primer argumento (tiene str ejemplo en su lugar)

pero no sé lo que significa y no puedo averiguarlo búsqueda a través de google o yahoo :(

+0

Como regla general, las importaciones deben realizarse en el ámbito del módulo, preferentemente en la parte superior. También necesita la clase Maps desde el módulo de mapas, no el módulo en sí (de modo que maps.Maps). – TryPyPy

Respuesta

13

se necesita una instancia de mapas y no con los mapas de clase:

maps.Maps.add_animal("Fred") # gives error 

mymap = maps.Map() 

mymap.add_animal("Fred") # should work 

por lo que debería o bien tener un atributo myMap de la clase de animal, por ejemplo, animales o como un objeto global (lo que funcione mejor para su caso).

3

Estás llamando un método no unida, lo que significa que está accediendo a un método de una clase sí mismo, y no a través de un instan ce (por lo que Python no sabe qué instancia se debe usar como self). Este código no debe dar ese error como se muestra, pero supongo que estás haciendo algo así como

maps.Maps.add_animal(rbt) 

No está claro lo que estás tratando de hacer, o que les ofrecería una sugerencia en cuanto a cómo solucionar eso.

Cuestiones relacionadas