我是Python的新手,所以我可能并没有以正确的方式提出这个问题,因此我试图找到答案(显然是失败的)。
我正在尝试建立一个类,然后查找该类中符合特定条件的所有实例。我不知道上课是否是解决此问题的正确方法,因此欢迎所有建议(即使使我远离上课)。
举一个简单的例子(请参见下面的代码),如果我想找到所有30岁以上的雇员,正确的方法是创建类方法吗?实际上,您将拥有DOB而不是年龄,但为简单起见,我已经随年龄而逝。我还需要某种变量,以便可以将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实例。任何帮助将不胜感激!
答案 0 :(得分:4)
通常,您会将实例放在某种集合中,例如列表,而不是单个变量。然后,您可以过滤列表或使用列表理解来获取所需列表中的元素。这是一个具有列表理解的示例:
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)
答案 1 :(得分:0)
或者也可以修改类:
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