2015-08-17 26 views
1

我試圖用一個Member類和一個Guest類表示組成員資格。問題是我需要一個小組能夠告訴我哪些成員是該小組的成員,但我也需要一個成員能夠告訴我它是哪個小組的成員。python ood - 類之間的重複信息

例如,使用下列內容:

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 

顯示各組中的成員,但如果我想顯示組每個成員的一部分那麼我需要爲列出它的組的每個訪客添加一個列表,所以看起來我將兩次存儲相同的信息,但只是以不同的形式。

我怎樣才能知道哪些成員是一個組的成員,以及一個成員屬於哪個組而不重複這些信息?

回答

0

,如果我想顯示組每個成員是那麼一部分,我會 需要一個列表添加到每個客人​​這將列出它的羣體,所以它 看來我會被重複,但只是存儲相同的信息在 不同的形式。

我怎樣才能知道哪些成員是一個組的成員,也知道哪些組是成員的一部分而不復制信息?

你描述的是不重複的信息。可以爲每個成員列出一個列表,以表明他們在哪個組中,並且同時爲每個組列出一個列表,以指明它擁有哪些成員。這是不一樣的列表,它是不同的信息。

你還應該記住的是分離關注。
你可以實現一個類或其他東西,可以跟蹤一切,所有成員和所有組,所以你的所有數據在一個地方,並不需要「重複」名單,但那不會那麼整潔。

如果你真的不想每個成員都有自己的組列表,你可以(在你的例子)只是使遍歷組和檢查它們是否爲某個部件

def getGroupsForMember(member): 
    groups = [] 
    for group in [group1, group2, group3]: 
    if member in group.MemberList: 
     groups.append(group.groupID) 
    return groups 
1
功能

首先,請考慮使用常見的編碼風格,例如在開始時用大寫字母寫所有的課程,用小寫字母寫所有的課程。您編寫代碼的方式令人困惑,因爲您的對象與類的名稱相同。 (更多關於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; 
+0

我不知道'getGroups()'應放置在哪裏。我認爲一個成員不應該有權訪問所有組,當組是全局列表時會發生這種情況。但對於其餘的我同意 –

+0

好吧,你要麼有一個全球成員或組的名單。你必須在某個地方跟蹤你的物體。 –