我想从具有特定实例的列表中返回某些项目。
我不清楚如何使用isinstance,但是据我所知,这似乎是最好的方法。
animals = [Hen(0.25), Hen(0.6), Hen(1.0), Hen(8), Rooster(0.25), Rooster(0.6), Rooster(1.0), Cow(1.0), Goat(1.0), Duck(1.0)]
def get_class(animals):
if not isinstance(animals, Hen):
return NotImplemented
return animals
我想让列表中的动物现在只有Hen(0.25),Hen(0.6),Hen(1.0),Hen(8)。任何帮助将不胜感激,但我宁愿只是指导而不是答案。
答案 0 :(得分:5)
您可能可以使用列表理解来实现:
new_animals = [x for x in animals if isinstance(x, Hen)]
这基本上会构建一个新列表,其中仅包含作为Hen类实例的项目。
种类无关,但是要以自己想要的干净方式表示Hen()
类,您可以执行以下操作:
In [25]: class Hen():
...: def __init__(self, number):
...: self.a = number
...: def __repr__(self):
...: return "Hen({})".format(self.a)
...:
In [26]: h = Hen(4.5)
In [27]: h
Out[27]: Hen(4.5)
希望这会有所帮助!
答案 1 :(得分:1)
这是示例代码
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Car:
def __init__(self, make, year):
self.make = make
self.year = year
def get_person_objs(objs):
return [obj for obj in objs if isinstance(obj, Person)]
persons = get_person_objs([Person("Peter", 12), Person("Tom", 23), Car("Toyota", 1998)])
for person in persons:
print(person.name)