从类属性链接列表



我有三个类

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)

应该给出一个包含所有类实例的列表,其中属性 age == 1。我现在的问题是如何从 animals-class 的所有属性创建一个可迭代的列表(参见函数脚本中的第 4 行(。

谢谢:)

您可以使用__dict__属性,例如,获取 dum1 和 dum2 你可以调用

outer_class.__dict__.keys()

我想我现在要处理这个问题有点不同:

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)

我得到结果,我想要。

每个人都:)

最新更新