2012-05-18 16 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") 

mi dà questo un errore che assomiglia a questometodo non legato con istanza come primo argomento ha stringa, ma richiede qualcosa di diverso

TypeError: il metodo non legato add_animal() deve essere chiamato con un'istanza Maps come primo argomento (ottenuto esempio str invece)

ma io non so cosa vuol dire e non posso capire la ricerca attraverso Google o Yahoo :(

+0

Come regola generale, le importazioni dovrebbero avvenire nell'ambito del modulo, preferibilmente nella parte superiore. Hai anche bisogno della classe Maps dal modulo mappe, non dal modulo stesso (quindi maps.Maps). – TryPyPy

risposta

13

È necessario un'istanza di Maps, non le mappe classe:

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

mymap = maps.Map() 

mymap.add_animal("Fred") # should work 

così si dovrebbe neanche avere un attributo mymap sulla classe degli animali, per esempio animali o come un oggetto globale (quello che funziona meglio per la vostra Astuccio).

3

si sta chiamando un metodo non legato, il che significa che sta accedendo un metodo da una classe stesso, e non attraverso un instan ce (quindi Python non sa quale istanza dovrebbe essere usata come self). Questo codice non dovrebbe dare tale errore, come indicato, ma suppongo che stai facendo qualcosa di simile

maps.Maps.add_animal(rbt) 

Non è chiaro quello che stai cercando di fare, o mi piacerebbe offrire un suggerimento su come risolvere il problema esso.

Problemi correlati