我试图用Member类和Guest类代表组成员身份。问题是,我需要一个组能够告诉我哪些成员是该组的成员,但是我还需要一个成员能够告诉我它是哪个组的成员。

例如,使用以下命令:

class Member:
    MemberCount = 0

    def __init__(self, name):
        self.name = name
        self.MemberID = Member.MemberCount
        Member.MemberCount += 1

    def displayMember(self):
        print "Member ID %d" % self.MemberID
        print "Member name %s" % self.name

class Group:
    groupCount = 0

    def __init__(self, name):
        self.name = name
        self.MemberList = []
        self.groupID = Group.groupCount
        Group.groupCount += 1

    def addMember(self, Member):
        self.MemberList.append(Member)

    def displayGroup(self):
        print "Group ID %d" % self.groupID
        print "Group name %s" % self.name
        print "This group contains the following members"
        for i in self.MemberList:
            print i.name,
            print "\n"

#Create some members
member1 = Member("Tim")
member2 = Member("Bill")
member3 = Member("Jack")
member4 = Member("Julian")
member5 = Member("Alex")

#Create some groups
group1 = Group("Golf Club")
group2 = Group("Shooting Club")
group3 = Group("Swimming Club")

#Add the members to groups
group1.addMember(member1)
group1.addMember(member2)
group1.addMember(member3)

group2.addMember(member3)
group2.addMember(member4)
group2.addMember(member5)

group3.addMember(member1)
group3.addMember(member2)
group3.addMember(member5)

#Display the groups' members
group1.displayGroup()
group2.displayGroup()
group3.displayGroup()


我得到以下输出:

Group ID 0
Group name Golf Club
This group contains the following members
Tim Bill Jack

Group ID 1
Group name Shooting Club
This group contains the following members
Jack Julian Alex

Group ID 2
Group name Swimming Club
This group contains the following members
Tim Bill Alex


它显示了每个组中的成员,但是如果我想显示每个成员所属的组,那么我需要向每个来宾添加一个列表,以列出其组,因此似乎我将两次存储相同的信息,但只是以不同的形式。

在不重复信息的情况下,我如何才能知道哪些成员是某个组的成员以及该成员所属的哪个组?

最佳答案

首先,请考虑使用常见的编码样式,例如开始时用大写字母写所有类,用小写字母写所有对象。编写代码的方式令人困惑,因为您拥有与类同名的对象。 (有关更多信息,请参见https://www.python.org/dev/peps/pep-0008/

现在解决问题。您基本上有两种解决方法:

1。
将组添加到Group.addMember中的每个成员,例如

// Group
def addMember(self, member):
    self.memberList.append(member)
    member.groups.append(self)


然而,这具有非常紧密的耦合的缺点。对于垃圾回收,您必须取消链接对象。同样,删除成员将需要您从成员列表中删除该成员,并从成员的组列表中删除该组。

2。
进行反向查询。与其询问成员所属的组,不如询问每个组中的成员。您可以使用以下成员的方法进行查询:

// Member
def getGroups(self):
    groups = []
    for group in globalGroups:
        if self in group.MemberList:
            groups.append(group)
    return groups;

关于python - python ood-类之间的重复信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32045890/

10-16 03:15