gpt4 book ai didi

python ood - 类之间的重复信息

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:51 24 4
gpt4 key购买 nike

我试图用 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

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

如何在不重复信息的情况下知道哪些成员是群组的成员以及成员属于哪些群组?

最佳答案

首先,请考虑使用通用的编码风格,例如所有类以大写字母开头,所有对象以小写字母开头。编写代码的方式令人困惑,因为对象与类同名。 (有关更多信息,请参阅 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 ood - 类之间的重复信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32045890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com