我有三个类
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)
我得到结果,我想要。
每个人都:)