Создание класса, положить в словарь, а затем в список - PullRequest
1 голос
/ 11 апреля 2020

мой 1-й вопрос.

Как создать скрипт с классом (с атрибутами), затем поместить эти атрибуты в словарь, а затем этот словарь в список. Я перепробовал много вариантов, но не могу получить «хороший» или «эффективный» или правильный вывод.

Я хочу получить доступ к определенным атрибутам, вот что я получил (не обращайте внимания на имена, это для тестирования)

exercise_list = []
exercise_dict = {}


class Exercises(object):

    def __init__(self, amount, category, info):

        self.amount = amount
        self.category = category
        self.info = info
        exercise_dict.__setitem__("amount", self.amount)
        exercise_dict.__setitem__("category", self.category)
        exercise_dict.__setitem__("info", self.info)
        exercise_list.append(exercise_dict)


Exercises(10, "arm", "Arm curls")
Exercises(20, "legs", "Squats")

print(exercise_list)
print(exercise_list[0])
print(exercise_list[1])

Вывод не совсем то, что я хотел, список перезаписывается:

[{'amount': 20, 'category': 'legs', 'info': 'Squats'}, {'amount': 20, 'category': 'legs', 'info': 'Squats'}]
{'amount': 20, 'category': 'legs', 'info': 'Squats'}
{'amount': 20, 'category': 'legs', 'info': 'Squats'}

Процесс завершен с кодом выхода 0

Ответы [ 3 ]

2 голосов
/ 11 апреля 2020

Просто вспомните, что упражнение диктуют каждый раз, когда вы вызываете класс

exercise_list = []

class Exercises(object):

    def __init__(self, amount, category, info):
        exercise_dict = {}
        self.amount = amount
        self.category = category
        self.info = info
        exercise_dict["amount"] = self.amount
        exercise_dict["category"] = self.category
        exercise_dict["info"] = self.info
        exercise_list.append(exercise_dict)


Exercises(10, "arm", "Arm curls")
Exercises(20, "legs", "Squats")

print(exercise_list)
print(exercise_list[0])
print(exercise_list[1])

вывод:

[{'amount': 10, 'category': 'arm', 'info': 'Arm curls'}, {'amount': 20, 'category': 'legs', 'info': 'Squats'}]
{'amount': 10, 'category': 'arm', 'info': 'Arm curls'}
{'amount': 20, 'category': 'legs', 'info': 'Squats'}
2 голосов
/ 11 апреля 2020

Это может быть значительно упрощено. Вам не нужно глобальное exercise_dict; Вы хотите создать новый дикт для каждого объекта.

exercise_list = []


class Exercises(object):

    def __init__(self, amount, category, info):
        e = {}
        self.amount = e['amount'] = amount
        self.category = e['category'] = category
        self.info = e['info'] = info
        exercise_list.append(exercise_dict)

или

exercise_list = []


class Exercises(object):

    def __init__(self, amount, category, info):

        self.amount = amount
        self.category = category
        self.info = info

        exercise_list.append({'amount': amount, 'category': category, 'info': info})
1 голос
/ 11 апреля 2020

Вы всегда добавляете одну и ту же ссылку в свой список. Действительно, вы устанавливаете его, добавляете и модифицируете тот же объект. Когда вы думаете об этом, dict - это объект с атрибутами. Если бы вы добавили объект в свой список и изменили его атрибуты, вы бы ожидали такого поведения.

TL; DR: вам нужно создать еще один диктовку, прежде чем добавить его в свой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...