Я хочу создать базовую систему атрибутов с Python (классы и операторы def) - PullRequest
0 голосов
/ 18 декабря 2018

Я начинающий программист, начинающий с Python, и пытаюсь создать простую систему атрибутов, способную взаимодействовать с другими разделами программы (например, с операторами def).Исходя из скудного объема знаний, которые у меня есть в настоящее время по языку Python, я предполагаю, что лучший способ выполнить эту задачу - использовать класс в сочетании с операторами def для создания команд и действий, относящихся к рассматриваемому классу.Всякий раз, когда я пытаюсь запустить свой код, я сталкиваюсь с этой ошибкой:

    if petname['hungry'] == True:
TypeError: 'type' object is not subscriptable

Опять же, у меня сейчас очень ограниченный объем знаний, поэтому я не знаю, близка ли моя программа кможно использовать, или если это просто бесполезный мусор.Я выложу свой код здесь.Я был бы очень признателен за некоторую коррективную критику;или, черт возьми, если бы кто-то мог правильно переписать это для меня, это было бы здорово!

Вот код, который я написал.Дайте мне знать, если потребуется дополнительная информация, чтобы дать исчерпывающий ответ:

petname = 'Dog'

class petname (object):
    attributes = {'health': 20, 'attack': 4, 'size': 5, 'hunger': True}

def feed(petname):
    if petname['hungry'] == True:
        petname['hungry'] = False
        petname['size'] = petname['size'] + 1
        print("{0} happily gobbles down the treat!".format(petname))
    else:
        print("{0} is not hungry.".format(petname))

if petname['hungry'] == True:
    print("{0} is hungry! Feed it something!".format(petname))
    input()   

1 Ответ

0 голосов
/ 18 декабря 2018

Вы повторно используете имя petname в своем коде и ожидаете, что оно будет означать разные вещи даже в одном контексте.Ваш класс petname не имеет особого смысла, так как один словарь pername.attributes будет совместно использоваться экземплярами всех petname объектов.

Ниже я организую объект Pet, чтобы он имел атрибутыиспользуйте наследование, чтобы установить значения по умолчанию для собак, и сделайте feed метод класса Pet:

class Pet(object):
    def __init__(self, name, health, attack, size, hunger):
        self.name = name
        self.health = health
        self.attack = attack
        self.size = size
        self.hunger = hunger
    def feed(self):
        if self.hunger:
            self.hunger = False
            self.size += 1
            print("{0} happily gobbles down the treat!".format(self.name))
        else:
            print("{0} is not hungry.".format(petname))

class Dog(Pet):
    def __init__(self, name):
        super(Dog, self).__init__(name, 20, 4, 5, True)

spot = Dog("Spot")
spot.feed()
# Spot happily gobbles down the treat!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...