0% ont trouvé ce document utile (0 vote)
54 vues6 pages

Héritage

Transféré par

infopy72
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
54 vues6 pages

Héritage

Transféré par

infopy72
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
Université De Kairouan “Année universitaire 2017- 2018 Institut Préparatoire aux Etudes Heritage sn . 2MP & ZTECHNO & 2PC d’Ingénieurs de Kairouan (IPEIK) Heritage simple L'héritage est une relation de spécialisation/généralisation entre deux classes. Elle indique qu'une classe dite classe fille spécialise une autre classe dite classe mere, ic. qu'elle possade les attributs et les méthodes de la classe mére plus d’autres qui lui sont propres. On parle aussi de super classe et de sous classe Syntaxe générale class classeMere: ‘une classe mére’ class classeFille(classeMere): ‘une classe fille héritant de la classe mére’ Exemple 1.1. Un héritage entre une classe "rectangle" et une classe "pavé droit" Un pavé droit pouvant étre vu comme un rectangle a trois dimensions, ie, un rectangle bien spécial, la relation d'héritage suivante a bien du sens class rectangle: gestion de rectangles’ class paveDroit(rectangle) gestion de bottes 4 chaussures’ La visibilité protégée Pour I'instant nous avons rencontré deux types de visibilité pour les attributs : + publique : les attributs sont accessibles de partout. + privée : les attributs ne sont accessibles qu’au sein de la classe. lest facile de comprendre que cela est insuffisant pour respecter au mieux une relation d'héritage. On aimerait en effet avoir la possibilité pour un attribut d'étre manipulable par les classes filles de sa propre classe. Nous allons donc avoir besoin d'une troisiéme sorte de visibilité. Cette remarque conduit a la définition suivante : un attribut est dit protégé si son utilisation est limitée a la classe et ses descendantes. Pour déclarer un attribut de fagon protégée, lors de l'implémentation de la méthode _init_ on fera précéder son nom par un simple underscore : def _init_(self,para1,para2,. attributPublic = valeur _attributProtege = valeur _attributPrive = valeur Exemple : Une classe "rectangle" Les attributs de notre classe mére "rectangle" vont étre déclarés protégés : class rectangle: def _init_(selfx,y) self_x=x self_y=y def surface(self) return self,_x*self._y Le constructeur de la classe fille On devra respecter une régle fondamentale : le constructeur de la classe fille doit faire un appel explicite au constructeur de la classe mére afin d’initialiser les attributs hérités de celle-ci. Pour cela on aura deux syntaxes 3 notre disposition. Dans la premiére syntaxe possible, on fait précéder _init_ du nom de la classe mére : class classeFille(classeMere): "" documentation de la classe fille™"” def _init_(selfpara1,para2,..): classeMere._init_(self,paral....) Exemple :Une classe "pavé droit" héritant de la classe "rectangle", premiére syntaxe Le constructeur de la classe "pavé droit” appelle celui de sa classe mére "rectangle" avec la syntaxe rectangle__init_(..) : class paveDroit(rectangle): def _init_{selfx,y,z): rectangle._init_(selfxy) sel_z=z def volume(selt): return self._x*self_y*self. photo = rectangle(3,4) print(photo.surface()) weston = paveDroit(3,4,10) print(weston.volume()) 12 120 Dans la seconde syntaxe autorisée, on fait précéder _init_ du mot clé superQ): class classeFille(classeMere): " documentation de la classe fille’ def _init_(selfpara1,para2, super()._init_(paral...) Exemple Une classe "pavé droit" héritant de la classe “rectangle”, seconde syntaxe Le constructeur de la classe "pavé droit” appelle celui de sa classe mére "rectangle" avec la syntaxe super(),_init_(...) : class paveDroit(rectangle) def _init_(self-xy,z): super()._init_(xy) self_z=z def volume(self): return self_x*self_y*self._z Transmission des membres On va ici revenir via des exemples sur la transmission des membres (attributs et méthodes) selon leur visibilité. Cela permettra de fixer définitivement les idées. Les définitions de visibilité : + publique : les membres sont accessibles de partout. + protégé : les membres ne sont accessibles qu’au sein de la classe et de ses descendantes. + privée : les attributs ne sont accessibles qu’au sein de la classe. Exemple : Un membre public Ici on utilise sans soucis une méthode publique de la classe mére dans la classe fille. Pour cela on fait précéder le nom de la méthode par le mot clé superQ): class paveDroit(rectangle) def _init_(selfx,y,2): super()._init_(xy) self_z=2 def volume(self): return super().surface()*self._z Méme chose avec une autre syntaxe, oi cette fois ci le nom de la méthode est précédée par le mot clé self class paveDroit(rectangle) def _init_(selfxy.z): super()._init_(xy) self,_2z= def volume(self): return self.surface()*self_z Exemple 1.7. Des membres protégés Ici on utilise sans problémes des attributs protégés de la classe mére dans la classe fille: class paveDroit(rectangle): def _init_(self,x,y,z): rectangle._init_(self,x,y) self._; def volume(self): return self._x*self., Exemple 1.8. Des membres privés Ici on constate l'utilisation impossible d’attributs privés de la classe mére dans la classe fille : class rectangle: def _init_(selfx,y) self._x=x self_y=y def surface(selt) return self._x*self_y class paveDroit(rectangle) def _init_(selfx,y,z): rectangle._init_(selfxy) self._; def volume(selt): return self._x*self__y*self_z santoni = paveDroit(2,3,4) print(santoni.volume()) AttributeError: 'paveDroit’ object has no attribute '_paveDroit_x'

Vous aimerez peut-être aussi