Создать несколько объектов из списка строк Python - PullRequest
0 голосов
/ 17 сентября 2018

Если бы у меня был список aList = ['Apple', 'Banana', 'Cherry', 'Date'], и я хотел бы сделать каждый элемент в списке объектом, например, эквивалентом Banana = AClass().После этого я смогу создать и вызвать self.anything для каждого элемента в списке.

Как мне поступить?
По сути, я пытаюсь достичь:

import random
class Fruit:
   def __init__(self):
        self.tastiness = random.randint(1,10)

fruits = ['Apple', 'Banana', 'Cherry', 'Date']
fruits[1] = Fruit()   # Creating a variable from the list
if Banana.tastiness < 5:
    print('Not tasty enough')

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

IIUC, вот что вы хотите сделать:

Использование строк в качестве ключа:

dfruits = {}
for f in fruits:
    dfruits[f] = Fruit()

Стиль понимания Dict

dfruits = {i: Fruit() for i in fruits}

Использование целочисленных клавиш длядикт:

dfruits = {}
for i,f in enumerate(fruits):
    dfruits[i] = Fruit()

или

dfruits = {i: Fruit() for i, _ in enumerate(fruits)}
0 голосов
/ 17 сентября 2018

Скорее всего, вы захотите сделать это, создав родительский класс "Fruit" с дочерними классами для "Apple", "Banana" и т. Д.

Вот статья, описывающая процесс выполнения того, что вы хотите.

https://www.digitalocean.com/community/tutorials/understanding-class-inheritance-in-python-3

Я знаю, что вы можете создать массив объектов, где отдельные элементы наследуют черты своего отдельного класса, однако я считаю, что они должны инициализировать ваш объект типа fruit /конкретные фрукты заранее.

x = Apple()
x.taste = "bitter"
list.append(x)
0 голосов
/ 17 сентября 2018

Учитывая ваш класс и список имен, вы можете использовать сложное понимание для создания экземпляров фруктов и иметь разумный доступ к ним через их имена:

fruits = ['Apple', 'Banana', 'Cherry', 'Date']
fruits = {k: Fruit() for k in fruits}

if fruits['Banana'].tastiness < 5:
    print('Not tasty enough')

Хотя можно создавать переменные с динамическими именами (чтобы ваш Banana.tastiness работал), я настоятельно рекомендую это сделать.

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