返回属于多个组成员的姓名列表,数据馈送与上一个问题不同



员工类设置了属性,我需要从数据馈送返回一个列表。

employee.py

class Employee(object):
def __init__(self, id, name, members=None):
self.id = id
self.name = name
self.members = members
self.is_team = members is not None

员工可以是多个组的成员。

feed.py

from employee import Employee
anne = Employee(0, 'Anne')
bob = Employee(1, 'Bob')
carlos = Employee(2, 'Carlos')
carol = Employee(3, 'Carol')
charlie = Employee(4, 'Charlie')
cherry = Employee(5, 'Cherry')
dave = Employee(6, 'Dave')
emma = Employee(7, 'Emma')
mary = Employee(8, 'Mary')
peggy = Employee(9, 'Peggy')
trent = Employee(10, 'Trent')
admin = Employee(90, 'Admin', [anne, bob, carlos])
engineering = Employee(91, 'Engineering', [carlos, peggy, trent])
catering = Employee(92, 'Catering', [admin, charlie, mary])
people = [anne, bob, carlos, carol, charlie, cherry, dave, emma, 
mary, peggy, trent, admin, engineering, catering]

我的解决方案。

import feed

def get_names(person, p_list):
try:
for p in p_list:
all_members = p.members
if all_members and person in all_members:
yield p
except AttributeError:
print('Not found')

print([t.name for t in get_names(feed.anne, feed.people)])

返回的数据应为:

['Admin', 'Catering']

由于安妮属于这两个群体,她是管理员,也是餐饮的一部分。

您可以使用此函数代替您的函数:

def get_names(person, p_list):
try:
for p in p_list:
all_members = p.members
if all_members is not None:
if person in all_members:
yield p
for i in all_members:
if i.members is not None:
temp = i.members
if person in temp:
yield p
except AttributeError:
print('Not found')

我会区分角色和员工,并为两者创建单独的类,因为它们代表不同的业务逻辑。

class Employee(object):
def __init__(self, id, name, groups):
self.name = name
self.groups = []
for group in groups:
self.add_group(group)
def add_group(self, group):
if not group in self.groups:
self.groups.append(group)
group.add_member(self)
def in_multiple_groups(self):
return len(self.groups) > 1
class Role(object):
def __init__(self, name):
self.name = name
self.members = []
def add_member(self, employee):
if not employee in self.employees:
self.employees.append(employee)
employee.add_group(self)

因此,现在查找多个组的员工要容易得多

admin = Role('admin')
engineering = Role('engineering')
alice = Employee(0, 'Alice', [admin])
bob = Employee(1, 'Bob', [admin, engineering])
tom = Employee(2, 'Tom', [admin, engineering])
employees = [alice, bob, tom]
for employee in employees:
if employee.in_multiple_groups():
//do something

相关内容

最新更新