'''composite pattern implemented as a list''' #composite mønstret class Del: '''den abstrakte overklasse''' def __init__(self, navn): self.navn = navn def introspect(self): text = 'Dictionary: ' text += '\n'+ str(self.__dict__) text += '\n'+'Attributes and functions: ' text += '\n'+ str(dir(self)) return text def __str__(self, niveau = 1): '''giver en textuel repræsentation af klassen __str__ gør det muligt at printe klassen direkte''' text = '\n' + niveau *' '+'(' + self.navn + ')' return text class Samling(Del): '''repræsenterer en samling af dele, enten samlinger eller simple''' def __init__(self, navn, dele = None): Del.__init__(self, navn) if dele == None: self.dele = [] else: self.dele = dele def tilfoej(self,enDel): ''' tilføjer en del til samlingen''' self.dele.append(enDel) def fjern(self,enDel): '''fjerner en del fra samlingen''' if enDel in self.dele: self.dele.remove(enDel) def hent(self,delNavn): '''returnerer en del med navnet delNavn''' for d in self.dele: if d.navn == delNavn: return d return None def __str__(self, niveau = 1): '''giver en textuel repræsentation af klassen __str__ gør det muligt at printe klassen direkte''' text = '\n' + niveau *' '+'(' + self.navn if self.dele != []: for enDel in self.dele: text += enDel.__str__(niveau+1) else: text += 'no parts' text += '\n' + niveau *' '+')' return text class Simpel(Del): '''repræsenterer en usammensat del''' def __init__(self, navn): Del.__init__(self, navn) bil = Samling('bil',[Samling('karosseri'),Samling('hjul'),Samling('motor')]) bil.hent('karosseri').tilfoej(Simpel('Tag')) bil.hent('karosseri').tilfoej(Simpel('Doere')) bil.hent('karosseri').tilfoej(Simpel('Bund')) bil.hent('hjul').tilfoej(Simpel('venstre forhjul')) bil.hent('hjul').tilfoej(Simpel('venstre baghjul')) bil.hent('hjul').tilfoej(Simpel('hoejre forhjul')) bil.hent('hjul').tilfoej(Simpel('hoejre baghjul')) bil.hent('motor').tilfoej(Simpel('stempler')) bil.hent('motor').tilfoej(Simpel('karburator')) print print 'Udprintning af bilen' print bil print print 'introspektion af bil' print bil.introspect() karosseri = bil.hent('karosseri') print print 'Udprintning af karosseriet' print karosseri print 'introspektion af karosseri' print karosseri.introspect() tag = karosseri.hent('Tag') print print 'Udprintning af taget' print tag print 'introspektion af tag' print tag.introspect()