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

2024-05-15 02:18:23 发布

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

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

员工可以是多个组的成员。你知道吗

你知道吗饲料.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']

由于安妮属于这两个团体,她是行政和餐饮的一部分。你知道吗


Tags: nameinselfidadminfeedemployeebob
2条回答

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

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

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

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')

相关问题 更多 >

    热门问题