返回满足条件的类的所有实例

2024-03-29 05:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python是完全陌生的,所以我可能没有用正确的方式问这个问题,我试图找到一个答案(显然没有成功)。你知道吗

我正在尝试设置一个类,然后查找满足某个标准的类的所有实例。我不知道上课是否是正确的方法,所以我对所有的建议都很开放(即使这会让我远离课堂)。你知道吗

举个简单的例子(见下面的代码),如果我想找到所有30岁以上的员工,正确的方法是创建一个类方法吗?事实上,你想要的是出生日期而不是年龄,但为了简单起见,我选择了年龄。我还需要一些变量,这样我就可以把30变成50。你知道吗

class Employee:
  def __init__(self, name, age):
    self.name = name
    self.age = age

e1 = Employee("John", 36)
e2 = Employee("Sally", 21)
e3 = Employee("Jamie", 53)

实现这一目标的“正确”方法或有效方法是什么?对于上面的这个例子,对于30岁以上的人,我想要e1和e3实例。任何帮助都将不胜感激!你知道吗


Tags: 实例方法答案nameselfage标准方式
2条回答

或者也可以修改类:

class Employee:
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.age_over_30 = self.age > 30

l = [Employee("John", 36), Employee("Sally", 21), Employee("Jamie", 53)]
print([i.name for i in l if i.age_over_30])

或者,如果要修改age属性,请使类:

class Employee:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  @property
  def age_over_30(self):
      return self.age > 30

您通常会将实例放在某种集合中,比如列表,而不是单个变量。然后可以过滤列表或使用列表理解来获取所需列表中的元素。下面是一个列表理解示例:

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

employees = [
    Employee("John", 36),
    Employee("Sally", 21),
    Employee("Jamie", 53)
]

over_thirty = [e for e in employees if e.age > 30]

for e in over_thirty:
    print(e.name)

打印:

John
Jamie

您可以避免使用额外的列表over_thirty,直接在筛选器结果上迭代以获得相同的结果:

for e in filter(lambda e: e.age > 30, employees):
    print(e.name)

相关问题 更多 >