begin process at 2010 02 09 19:38:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > CLASSE GÉNÉRIQUE - PLATEAU

CLASSE GÉNÉRIQUE - PLATEAU




 Description

J'ai chercher il y a pendant quelque temps un code python pour faire des classes génériques (http://fr.wikipedia.org/wiki/G%C3%A9n%C3%A9ricit% C3%A9).

Dans cette source on va faire une classe générique (Plateau2D) qui va prendre en paramètre une classe de type "Case". Il aura dans le code un contrôle de type pour vérifié que la classe passé en paramètre pour "Plateau2D" dérive bien de Case.

L'utilisation de classe générique permet la réutilisation du code au maximum.

J'utilise : Python 2.5

Source

  • #! /usr/bin/python
  • # Illustation classe génériques
  • # Ecrit par : Beltegeuse
  • # Licence : LGPL
  • # Date : 31/01/09
  • #
  • class ErrorType(Exception): pass
  • class Case:
  • def __init__(self, x, y, plateau):
  • self.x = x
  • self.y = y
  • self.plateau = plateau
  • def __str__(self):
  • return "x : " + str(self.x) + " y : " + str(self.y) + " plateau : " + str(self.plateau)
  • def colonneParent(self):
  • return self.plateau.colonne(self.x)
  • def ligneParent(self):
  • return self.plateau.ligne(self.y)
  • class Plateau:
  • def __init__(self, caseClass=Case):
  • # Controle de type
  • if(not isinstance(caseClass(0, 0, None), Case)):
  • raise ErrorType , "Try to add 'caseValue' as not 'Case' type"
  • class CaseLaby(Case):
  • def __init__(self, x, y, plateau):
  • Case.__init__(self, x, y, plateau)
  • self.murH = True
  • self.murV = True
  • self.passer = False
  • class CasePiCross(Case):
  • def __init__(self, x, y, plateau):
  • Case.__init__(self, x, y, plateau)
  • self.colorier = False
  • class Plateau2D(Plateau):
  • def __init__(self, dimension, name = "Plateau1", caseClass=Case):
  • Plateau.__init__(self, caseClass)
  • self.name = name
  • self.cases = []
  • for x in range(dimension[0]):
  • temp = []
  • for y in range(dimension[0]):
  • temp.append(caseClass(x, y, self))
  • self.cases.append(temp)
  • def ligne(self, id):
  • if(id > len(self.cases)):
  • raise Exception, "Out bound Plateau"
  • return self.cases[id]
  • def colone(self, id):
  • if(id > len(self.cases[0])):
  • raise Exception, "Out bound Plateau"
  • listeReturn = []
  • for ligneCase in self.cases:
  • listeReturn.append(ligneCase[id])
  • return listeReturn
  • def __str__(self):
  • return self.name
  • if __name__=="__main__":
  • print "Lancement"
  • #Un plateau normal
  • p = Plateau2D((10, 10))
  • for case in p.ligne(0):
  • print case
  • # Plateau laby
  • p = Plateau2D((10, 10), caseClass=CaseLaby)
  • #Plateau PiCross
  • p = Plateau2D((10, 10), caseClass=CasePiCross)
  • print "Fin
#! /usr/bin/python
# Illustation classe génériques
# Ecrit par : Beltegeuse
# Licence : LGPL
# Date : 31/01/09
#

class ErrorType(Exception): pass

class Case:
    def __init__(self,  x,  y,  plateau):
        self.x = x 
        self.y = y
        self.plateau = plateau
    
    def __str__(self):
        return "x : " + str(self.x) + " y : " + str(self.y) + " plateau : " + str(self.plateau)
    
    def colonneParent(self):
        return self.plateau.colonne(self.x)
    
    def ligneParent(self):
        return self.plateau.ligne(self.y)

class Plateau:
    def __init__(self, caseClass=Case):
        # Controle de type
        if(not isinstance(caseClass(0, 0,  None),  Case)):
            raise  ErrorType , "Try to add 'caseValue' as not 'Case' type"

class CaseLaby(Case):
    def __init__(self,  x,  y,  plateau):
        Case.__init__(self,  x, y,  plateau)
        self.murH = True
        self.murV = True
        self.passer = False

class CasePiCross(Case):
    def __init__(self,  x,  y,  plateau):
        Case.__init__(self,  x,  y,  plateau)
        self.colorier = False

class Plateau2D(Plateau):    
    def __init__(self,  dimension,  name = "Plateau1",  caseClass=Case):
        Plateau.__init__(self,  caseClass)
        self.name = name
        self.cases = []
        for x in range(dimension[0]):
            temp = []
            for y in range(dimension[0]):
                temp.append(caseClass(x, y,  self))
            self.cases.append(temp)
    
    def ligne(self, id):
        if(id > len(self.cases)):
            raise Exception,  "Out bound Plateau"
        return self.cases[id]
    
    def colone(self, id):
        if(id > len(self.cases[0])):
            raise Exception,  "Out bound Plateau"
        listeReturn = []
        for ligneCase in self.cases:
            listeReturn.append(ligneCase[id])
        return listeReturn
    
    def __str__(self):
        return self.name

if __name__=="__main__":
    print "Lancement"
    #Un plateau normal
    p = Plateau2D((10, 10))
    for case in p.ligne(0):
        print case

    # Plateau laby
    p = Plateau2D((10, 10),  caseClass=CaseLaby)
    
    #Plateau PiCross
    p = Plateau2D((10, 10),  caseClass=CasePiCross)
    print "Fin

 Conclusion

J'ai posté cette source car j'ai passé quelques heures à chercher comme on pouvais le faire en python.


 Sources du même auteur

Source avec Zip Source avec une capture PYSNAKE WITH PYGAME
Source avec Zip ISBN : RECONNAISSANCE

 Sources de la même categorie

CONVERTISSEUR DE TEMPÉRATURE par skizo00o
Source avec Zip Source avec une capture I.A. (DÉBUTANT) par Rano Its
Source avec Zip LA SYNTHÈSE VOCALE DANS WINDOWS XP EN FRANÇAIS par brennal
Source avec une capture SEARCH WORD par lonewolfs
Source avec Zip Source avec une capture TEST MUSIQUE INTERVALLES par ornym

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

remplacement de szelect case [ par Cyrion81 ] BonjourJe commence a apprendre le python qui ne parait excellent, dans la panoplie de boucle ou autre, je n ai rien trouvé qui puisse correspondre à u


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales