class Sorter:
    """Classe permettant le tri d'une liste"""

    def sort(self, list):
        """Trie la liste indiquée. Le fonctionnement dépend
           de l'implémentation de la méthode compareItems()"""
        for i in range(len(list) - 1):
            for j in range(i, len(list)):
                if self.compareItems(list[i], list[j]):
                    list[i], list[j] = list[j], list[i]

    def getName(self):
        """Exemple de méthode au comportement par défaut"""
        return "Trieur de liste"

    def getDescription(self):
        """Exemple de méthode abstraite"""
        pass

    def compareItems(self, item1, item2):
        """Méthode de spécialisation de l'algorithme"""
        pass

class AscendantSorter(Sorter):
    """Trieur ascendant"""
    def compareItems(self, item1, item2):
        return item1 >= item2
    def getDescription(self):
        return "Tri par ordre normal"
    def getName(self):
        return "Ascendant"

class DescendantSorter(Sorter):
    """Trieur en sens inverse"""
    def compareItems(self, item1, item2):
        return item1 <= item2
    def getDescription(self):
        return "Tri par ordre inverse"

if __name__ == '__main__':
    list = ['b', 'e', 'a', 'c', 'z']
    s = AscendantSorter()
    s.sort(list)
    print list
    s = DescendantSorter()
    s.sort(list)
    print list
