Python : Atelier intermédiaire


INTRODUCTION


STANDARD LIBRARY ET PACKAGES

Bibliothèque standard (standard library)

Modules explorés ou abordés pendant ateliers AUF :

Modules potentiellement utiles pour administrateurs système :

Autres modules d'intérêt :

Packages

pypi

http://pypi.auf.org/

autres

CLASSES ET OBJETS

En Python, tout est un objet... on veut donc pouvoir créer nos propres objets en Python.

Classe et objets : structure et données

Attributs et méthodes

Créer une Classe

class Personne():
    pass

self

Créer méthode d'initialisation d'objet

class Personne():
    def __init__(self, nom, prenom=""):
        self.nom = nom
        self.prenom = prenom

Créer une (autre) méthode

class Personne():
    def __init__(self, nom, prenom=""):
        self.nom = nom
        self.prenom = prenom

    def nom_complet(self):
        return "%s %s" % (self.nom.upper(), self.prenom)

CRUD d'objets

Attributs et méthodes : de classe et d'objet

Dans l'exemple précédant, nous avons vu les attributs et méthodes d'un objet :

Il existe aussi des attributs et méthodes de classe :

class Personne():
    """Représente les personnes"""
    definition = "Une personne est un individu physique, un humain quoi!"
    
    def __init__(self, nom, prenom=""):
        self.nom = nom
        self.prenom = prenom
        
    def nom_complet(self):
        return "%s %s" % (self.nom.upper(), self.prenom)
    
    @staticmethod
    def wordnet_synonyme():
        wordnet_syn = "Individual" # fake ;)
        return wordnet_syn

Il est à noter que :

davin = Personne(nom="Baragiotta", prenom="Davin")
pascal = Personne(nom="Bou Nassar", prenom="Pascal")

davin.definition
'Une personne est un individu physique, un humain quoi!'

pascal.definition
'Une personne est un individu physique, un humain quoi!'

Personne.definition
'Une personne est un individu physique, un humain quoi!'

davin.definition == pascal.definition == Personne.definition
True

davin.wordnet_synonyme()
'Individual'

pascal.wordnet_synonyme()
'Individual'

In [11]: Personne.nom
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

/home/giotta/Bureau/<ipython console> in <module>()

AttributeError: class Personne has no attribute 'nom'

In [12]: Personne.prenom
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

/home/giotta/Bureau/<ipython console> in <module>()

AttributeError: class Personne has no attribute 'prenom'

In [13]: Personne.nom_complet()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/giotta/Bureau/<ipython console> in <module>()

TypeError: unbound method nom_complet() must be called with Personne instance as first argument (got nothing instead)

Héritage

On peut créer une hiérarchie de classe, avec des SousClasse qui hérite des ClasseParent.

Syntaxe d'héritage

Attributs et méthodes de ClasseParent sont hérités

__init__() d'une SousClasse

class Personne():
    """Représente les personnes"""
    definition = "Une personne est un individu physique, un humain quoi!"

    def __init__(self, nom, prenom=""):
        self.nom = nom
        self.prenom = prenom

    def nom_complet(self):
        return "%s %s" % (self.nom.upper(), self.prenom)

    @staticmethod
    def wordnet_synonyme():
        wordnet_syn = "Individual" # fake ;)
        return wordnet_syn

class Professeur(Personne):
    def __init__(self, nom, prenom="", universite=""):
        self.universite = universite
        Personne.__init__(self, nom, prenom)

In [2]: davin = Personne(nom="Baragiotta", prenom="Davin")

In [3]: prof = Professeur(nom="Lemay", prenom="Paul", universite="UQAM")

In [4]: prof.
prof.__class__         prof.__module__        prof.nom_complet       prof.wordnet_synonyme
prof.__doc__           prof.definition        prof.prenom            
prof.__init__          prof.nom               prof.univesite 

In [5]: davin.
davin.__class__         davin.__module__        davin.nom_complet       
davin.__doc__           davin.definition        davin.prenom            
davin.__init__          davin.nom               davin.wordnet_synonyme 

AUTRES NOTIONS PYTHON

Décorateurs

Les décorateurs sont des fonctions qui "wrappent" d'autres fonctions :

Exemple de décorateur conçu pour contrôler l'accès : is_admin

def is_admin(fn):
    def inner(admin, *args, **kwargs):
        if admin:
            return fn(*args, **kwargs)
        else :
            return "Nope"
    return inner

@is_admin
def salut(nom):
    return "salut %s" % nom

Pour décorer une fonction : décorer avec @nom_fonction_qui_decore

Il faut appeler la fonction décorée aussi avec les paramètres requis par la fonction qui décore.

In [10]: admin = True

In [11]: salut(admin, 'Davin')
Out[11]: 'salut Davin'

In [12]: admin = False

In [13]: salut(admin, 'Davin')
Out[13]: 'Nope'

Exceptions

Pour gérer les exceptions qui peuvent être levées lors de l'exécution du code...

In [18]: davin = Personne(nom="Baragiotta", prenom="Davin")

In [19]: davin.nationalite
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

/home/giotta/Bureau/<ipython console> in <module>()

AttributeError: Personne instance has no attribute 'nationalite'

In [20]: try:
   ....:     davin.nationalite
   ....: except AttributeError:
   ....:     davin.nationalite = None
   ....:     
   ....:     

In [21]: davin.nationalite

In [22]: 


EXERCICE


CONCLUSION

Ateliers/2012-02-24/Python/Plan (dernière édition le 2012-08-27 07:27:18 par DavinBaragiotta)