2017-01-26 5 views
-4

Ich bin relativ neu in Python und ich habe versucht, OOP in Python mit diesem Beispiel zu üben:Typ Fehler: ‚str‘ Objekt ist nicht aufrufbar (Python)

def get_input(): 
command = input(':').split() 
verb_word = command[0] 
if verb_word in verb_dict: 
verb = verb_dict[verb_word] 
else: 
print('Unkown verb "{}"'.format(verb_word)) 
return 

if len(command) >= 2: 
noun_word = command[1] 
print(verb(noun_word)) 
else : 
print(verb('nothing')) 

def say(noun): 
return "You said '{}'".format(noun) 

class GameObject: 
class_name = "" 
_desc = "" 
health_line = "" 
objects = {} 

def __init__(self,name): 
    self.name = name 
    GameObject.objects[self.class_name] = self 

    def desc(self): 
    return self.class_name + "\n" + self._desc +  "\n" + self.health_line 

class Goblin(GameObject): 
    def __init__(self,name): 
    self.class_name = "goblin" 
    self.health = 3 
    self._desc = 'A foul creature' 
    super().__init__(name) 

@property 
def desc(self): 
    if self.health >= 3: 
    return self._desc 
    elif self.health == 2: 
    health_line = 'It is badly bruised' 
    elif self.health == 1: 
    health_line = 'It is barely standing' 
    elif self.health <= 0: 
    health_line = 'It is dead' 
    return self._desc +'\n'+ self.health_line 

@desc.setter 
def desce(self,value): 
    self.__desc = value 

goblin = Goblin("Gobbly") 

def hit(noun): 
if noun in GameObject.objects: 
    thing = GameObject.objects[noun] 
    if type(thing) == Goblin: 
    thing.health = thing.health - 1 
    if thing.health <= 0: 
    msg = "You killed it" 
    else: 
    msg = "You hit the {}".format(thing.class_name) 
else: 
    msg = "There is no {} here".format(noun) 
return msg 

def examine(noun): 
if noun in GameObject.objects: 
    return GameObject.objects[noun].desc() 
else: 
    return "There is no '{}' here".format(noun) 

verb_dict ={"say":say,"examine":examine,"hit":hit} 

while True : 
get_input() 

Es scheint, dass diese Linie :

return GameObject.objects[noun].des() 

gibt den Type Error zurück. Ich bin nicht sicher, warum das so ist, und ich bin schon eine Weile hier. Jede Hilfe wird sehr geschätzt.

+8

Aus Liebe zu Guido, nutze 4 Felder! –

+1

Bitte formatieren Sie den Code mit korrekter Einrückung, so dass andere Benutzer den Code richtig verstehen können (ich weiß nicht einmal, wie ich dies für Sie neu eintragen kann) –

+0

@Natecat Er soll die Funktion (Verb) mit Nomen_word als Argument bezeichnen – RenWarRen

Antwort

0

Wenn Sie die ab-Funktion aufrufen möchten, müssen Sie es als solches zu tun haben:

GameObject.desc(parameter) 

, wo der Parameter-Objekt sein kann [noun]. Dies liegt daran, dass die desc-Methode zur GameObject-Klasse gehört.

Verwandte Themen