类型错误:'str'对象不可调用(Python)

时间:2017-01-26 22:44:36

标签: python

我是python的新手,我一直在尝试使用这个例子在python中练习OOP:

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()

似乎这一行:

 return GameObject.objects[noun].des()

返回类型错误。我不知道为什么会这样,而且我已经有一段时间了。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果你想调用desc函数,你必须这样做:

GameObject.desc(parameter)

其中参数可以是对象[名词]。这是因为desc方法属于GameObject类。