связывание списков из атрибутов класса - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть три класса

class Animals:
    def __init__(self):
         self.dog = []
         self.cat = [] 

class Dog:
    def __init__(self,age,teeth):
        self.age   = age
        self.teeth = teeth

class Cat:
    def __init__(self,age,legs):
        self.age  = age
        self.legs = legs

и функция:

def get_animals_from_attribute_value(animals_class, attribute, value):
    from itertools import chain
    animals = []
    for animal in chain( -> all attributes of animals_class, e.g. dog and cat <- ):
        x = getattr(animal, attribute, None)
        if x == value:
            animals.append(animal)
    return animals

Сценарий

animals = Animals()

animals.dog.append(Dog(1, 2))
animals.dog.append(Dog(3, 1))
animals.cat.append(Cat(1, 3))

certain_animals = get_animals_from_attribute_value(animals,"age",1)

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

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Я думаю, что теперь я решу проблему немного иначе:

class Dog:
    def __init__(self,age,teeth):
        self.age   = age
        self.teeth = teeth

class Cat:
    def __init__(self,age,legs):
        self.age  = age
        self.legs = legs

def get_objects_from_attribute_value(input_list, attribute, value):
    output_list = []
    for object in input_list:
        If getattr(object, attribute, None) == value:
            output_list.append(object)
    return output_list

с

animals = []

animals.append(Dog(1, 2))
animals.append(Dog(3, 1))
animals.append(Cat(1, 3))

output_list = get_objects_from_attribute_value(animals, "age", 1)

Я получаю результаты, я хотел.

Ты все:)

0 голосов
/ 16 февраля 2020

Вы можете использовать атрибут __dict__, например, чтобы получить dum1 и dum2, которые вы можете вызвать

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