2015-08-04 5 views
-2

Edit:AttributeError: «ул» объект не имеет атрибута «местоположение» - Python

Я передаю вход через с помощью модуля CMD (в настоящее время тестирует его, набрав take bat), я новичок в Python тоже так Прошу прощения, если это не то, о чем люди спрашивали в ответах. Прочитав еще один ответ в другом месте на этом сайте, я думаю, что ошибка может означать что-то вроде этого, вход - это строка, а не объект с тем же именем. Если это так, то можно ли каким-либо образом определить, что они поставили в качестве аргумента для «взять» в качестве объекта, который соответствует? Я не уверен, как задать этот вопрос или даже если я использую правильную терминологию для его поиска, но если кто-то сможет подтвердить, что это моя проблема, и указать мне в общем направлении ответа на мой второй вопрос: с удовольствием посмотрел бы сам.

Следующий код разбит на четыре или около того файлов, чтобы облегчить для себя чтение, и он работает (на всякий случай, показывая это, похоже, что есть больше проблем, чем есть). Сейчас только часть я ударил ошибку с это do_take команды


import cmd 
import json 

def get_room(id): 
    ret = None 
    with open(str(id)+".json", "r") as new: 
     jsontext = new.read() 
     current = json.loads(jsontext) 
     current["id"] = id 
     ret = Room(**current) 
    return ret 

class Game(cmd.Cmd): 
    def __init__(self): 
     cmd.Cmd.__init__(self) 

     self.loc = get_room(1) 

    def do_take(self, item_name): 
    """This is my take command, to be followed by an item name, which is giving me the error""" 
     if item_name.location == self.loc.id: 
      item_name.location = "backpack" 
      print(item_name.location) 

class Item(object): 
"""This is the basic class that all items will inherit from""" 
def __init__(self, itemname, defence, attack, weight, location, hidden): 
    self.itemname = itemname 
    self.defence = defence 
    self.attack = attack 
    self.weight = weight 
    self.location = location 
    self.hidden = hidden 

bat = Item("Baseball Bat", 1, 4, 1, 1, False) 

Я печатаю «взять биту», который вызывает do_take (и т.д ...), чтобы попытаться получить расположение пункта , проверьте его против моего текущего местоположения (если он был указан ранее), а затем, если совпадения, измените расположение предмета на «рюкзак»

местоположения совпадают, а когда я print(item_name.location) Я получаю 1 в результате, но когда я пытаюсь соответствовать ему Я получаю AttributeError: 'str' object has no attribute 'location'

Любая помощь, помогающая этому, была бы очень признательна, и это мой первый пост здесь, поэтому я приношу свои извинения, если я что-то поменял.

+2

Что вы передадите 'do_take' с' item_name'? – TigerhawkT3

+1

Возможно, вы можете передать строку 'do_take', не могли бы вы разместить дополнительную информацию? –

+2

Редактируйте свой вопрос, чтобы включить пример кода, который вызывает 'do_take', который вызывает ошибку. – shuttle87

ответ

0

После повторного формулирования вопроса мне удалось найти еще одно похожее на мое, которое имело ответ, который мне нужен.

Convert String to Object name

Я изменил код из:

def do_take(self, item_name): 
    if item_name.location == self.loc.id: 
     item_name.location = "backpack" 
     print(item_name.location) 

To:

def do_take(self, item_name): 
    if Item_List[item_name].location == self.loc.id: 
     Item_List[item_name].location = "backpack" 

Item_List = {"bat": bat, "hubcap": hubcap} 

И теперь проблема решена. Спасибо за помощь.

Смежные вопросы