Вы находитесь на странице: 1из 38

Cours Python II

Franck Delahaye - Observatoire de Paris


1
Sommaire
1 - Scipy Quelques ee!ples d"outils########################################################################################################$
1#1 - %raite!ent du si&nal##########################################################################################################################$
1#' - Interpolation nu!(rique####################################################################################################################)
1#$ - Int(&ration nu!(rique ######################################################################################################################*
1#) - %raite!ent d"i!a&es##########################################################################################################################+
' - Python et les codes en C et Fortran ########################################################################################################,
'#1 - -outine Fortran#################################################################################################################################,
'#' - -outine C########################################################################################################################################1.
$ - Python et la pro&ra!!ation ob/et##########################################################################################################1'
$#1 - -appel des principes de base de la Pro&ra!!ation Orient(e Ob/et###############################################1'
$#' - D(0inition de classe dans Python ###################################################################################################1)
$#$ - Port( des variables et ob/ets - Scopes and 1a!espace ##################################################################1*
$#) - Instanciation et Initialisation###########################################################################################################12
$#* - 3(rita&e###########################################################################################################################################1,
) - Python et les 4id&ets#############################################################################################################################'1
)#1 - 4id&et de base - 5b########################################################################################################################'*
)#' - 6e place!ent des 5bs dans la 0en7tre#############################################################################################'2
)#'#1 - 6e Packer 8 ##############################################################################################################################'2
)#'#' - 6e &ridder################################################################################################################################'+
)#$ - 6es !enus#######################################################################################################################################'9
* - Conclusion############################################################################################################################################$'
2 - :nnee : 8 Scopes et 1a!espace##########################################################################################################$'
+ - :nnee ; 8 Quelques notes sur la syntae de classe#############################################################################$)
+#1 - <ariable dans les classes#################################################################################################################$)
+#' - Sel0 ################################################################################################################################################$*
9 - 1ote On the =nderscore 8######################################################################################################################$*
Franck Delahaye - Observatoire de Paris
'
1 - Scipy Quelques exemples d'outils
1ous avons (voqu( Scipy bri>ve!ent dans la partie I du cours pour citer les di00(rents cha!ps
d"application ?statistiques@ opti!isation@ int(&ration nu!(rique@ al&>bre lin(aire@ trans0or!(e de
Fourier@ traite!ent du si&nal@ traite!ent d"i!a&es@ int(&ration d"(quations di00(rentielles@ 0onctions
sp(cialesA de ce !odule# Scipy est construit B partir de 1u!py@ ce qui si&ni0ie qu"il 0aut avoir le
!odule 1u!py pour 0aire 0onctionner le !odule Scipy# Cn e00et no!bre de 0onctions ainsi que le
type 'ndarray" de Scipy sont en 0ait ceu d(0inis dans 1u!py# 1ous allons voir quelques ee!ples
d"outils de Scipy pour le traite!ent du si&nal@ les statistiques@ l"interpolation nu!(rique et
l"int(&ration nu!(rique#
1ote 8 Contraire!ent au pre!ier cours nous allons i!porter individuelle!ent les !odules# Cn e00et
si ipython -pylab per!et d"avoir acc>s au 0onctions principales de nu!py@ !atplolib et scipy@ il y
a certains sous !odules dont nous aurons besoin qui ne sont pas char&(s !7!e si ceu ci
appartiennent au di00(rents paquets# De plus cela per!ettra de rep(rer quelques uns de ces sous
!odules et les ob/ets qu"ils co!portent#
1.1 - Traitement du signal
6es outils de traite!ent du si&nal sont d(0inis dans le !odule "scipy.signal"# Il y a aussi des
!(thodes associ(es au FF% dans le pack "fftpack"# On peut ainsi 0aire des convolutions@ du
0iltra&e@ d(ter!iner des 0onctions de trans0ert#
Franck Delahaye - Observatoire de Paris
$
i!port scipy as sp D i!port du !odule scipy# 6"appel des 0onctions se 0era avec le pr(0ie sp#
i!port nu!py as np D ------------------- nu!py ---------------------------------------------------- np#
0ro! scipy i!port si&nal D sous !odule si&nal appartenant B scipy non char&( avec sp ?li&ne1A
0ro! !atplotlib#pyplot i!port E i!port des outils de &raphe avec acc>s direct sans pr(0ie
F np#linspace?-1.@ 1.@ 1..A
ysin F np#sin?A D si&nal sinusoGdale
ysinHrs'. F si&nal#resa!ple?ysin@'.A D On (chantillonne sur '. points# 6"(chantillonna&e est
ysinHrs*.F si&nal#resa!ple?ysin@*.A D 0ait en utilisant une FF%# :ttention au bord# 6"utilisation
D de la FF% suppose une p(riodicit( du si&nal
1.2 - Interpolation numrique
6e !odule d"interpolation de Scipy co!prend plusieurs !(thodes d"interpolation d(0inies sous
0or!es de classes# Il est possible d"utiliser des interpolations lin(aire@ cubique I# Il 0aut instancier
la classe pour l"utiliser#
Franck Delahaye - Observatoire de Paris
)
i!port scipy as sp
i!port nu!py as np
0ro! scipy i!port interpolate
0ro! !atplotlib#pyplot i!port E
H!easure F np#linspace?.#@1@1.A
bruit F np#rando!#uni0or!?-.#1@.#1@1.A
yH!easure F np#sin?' E np#pi E H!easureA J bruit
D instanciation de la classe interpolation avec di00>rent type d"al&orith!e lin(aire@ cubic@
Dquadratic
interpHlin F interpolate#interp1d?H!easure@yH!easureA
interpHcubic F interpolate#interp1d?H!easure@yH!easure@kindF"cubic"A
interpHquad F interpolate#interp1d?H!easure@yH!easure@kindF"quadratic"A
D
Hco!puted F np#linspace?.@1#@*.A
yHintHlin F interpHlin?Hco!putedA
yHintHcub F interpHcubic?Hco!putedA
yHintHquad F interpHquad?Hco!putedA
1.3 - Intgration numrique
Scipy propose une s(rie de classes pour l"int(&ration# Cet ense!ble se trouve re&roup( dans le
sous-!odule "scipy.integrate"#
On peut int(&rer une 0onction d(0inie ou bien 0aire une int(&ration B partir d"un (chantillon de
points ou encore r(soudre un syst>!e d"(quations di00(rentielles si!ple# <oici trois ee!ples
dKint(&ration#
Franck Delahaye - Observatoire de Paris
*
In L1M8 0ro! scipy i!port inte&rate
In L'M8 N inte&rate
%ype8 !odule
;ase Class8 Otype "!odule"P
Strin& For!8 O!odule "scipy#inte&rate" 0ro! "QusrQlibQpython'#2Qdist-
packa&esQscipyQinte&rateQHHinitHH#pyc"P
1a!espace8 Interactive
File8 QusrQlibQpython'#2Qdist-packa&esQscipyQinte&rateQHHinitHH#py
Docstrin&8
Inte&ration routines
FFFFFFFFFFFFFFFFFFFF

Rethods 0or Inte&ratin& Functions &iven 0unction ob/ect#

quad -- Seneral purpose inte&ration#
dblquad -- Seneral purpose double inte&ration#
tplquad -- Seneral purpose triple inte&ration#
0iedHquad -- Inte&rate 0unc?A usin& Saussian quadrature o0 order n#
quadrature -- Inte&rate 5ith &iven tolerance usin& Saussian quadrature#
ro!ber& -- Inte&rate 0unc usin& -o!ber& inte&ration#

Rethods 0or Inte&ratin& Functions &iven 0ied sa!ples#

trapT -- =se trapeToidal rule to co!pute inte&ral 0ro! sa!ples#
cu!trapT -- =se trapeToidal rule to cu!ulatively co!pute inte&ral#
si!ps -- =se Si!pson"s rule to co!pute inte&ral 0ro! sa!ples#
ro!b -- =se -o!ber& Inte&ration to co!pute inte&ral 0ro!
?'EEk J 1A evenly-spaced sa!ples#

See the special !odule"s ortho&onal polyno!ials ?specialA 0or Saussian
quadrature roots and 5ei&hts 0or other 5ei&htin& 0actors and re&ions#

Inter0ace to nu!erical inte&rators o0 ODC syste!s#

odeint -- Seneral inte&ration o0 ordinary di00erential equations#
ode -- Inte&rate ODC usin& <ODC and U<ODC routines#
Int(&ration d"une 0onction#
Int(&ration B partie d"un (chantillon de point#
-(solution d"une (quation di00(rentielle#
Franck Delahaye - Observatoire de Paris
2
i!port nu!py as np
0ro! scipy i!port inte&rate
de0 !aFonction?A8
return sin?A

In L)M8 inte&rate#quad?!aFonction@.@np#piA D

0
Pi
sin x dx=cos Picos0
OutL)M8 ?'#.@ '#''.))2.),'*.$1$1e-1)A D -(sultat de l"int(&ration et erreur
i!port nu!py as np
0ro! scipy i!port inte&rate
F linspace?.@np#pi@1...A
y F sin ?A
In L)M8 inte&rate#trapT?y@ @ d F .#1A D

0
Pi
sin x dx=cos Picos0
OutL)M81#,,,,,9$*1++.9*') D -(sultat de l"int(&ration
-(soudre l"(quation di00(rentielle8 dyQdt F -'y entre t F . et )@ avec la condition initiale y?tF.A F 1#
i!port nu!py as np
0ro! scipy#inte&rate i!port odeint
de0 calcHderivative?ypos@ ti!eA8
return -'Eypos
ti!eHvec F np#linspace?.@ )@ ).A
yvec F odeint?calcHderivative@ 1@ ti!eHvecA
i!port pylab as plt
plt#plot?ti!eHvec@ yvecA
plt#label?"%i!e LsM"A
plt#ylabel?"y position L!M"A
1. - Traitement d'images
6es outils de Scipy per!ettent aussi de !anipuler des i!a&es# Celles ci sont consid(r(es co!!e
des !atrices# 6es scripts suivants char&ent certains !odules ?sous !odulesA individuelle!ent a0in
de rep(rer la provenance des di00(rentes 0onctions# On peut retrouver la !7!e 0onction dans
di00(rents !odules# Il eiste d"autres !odules qui per!ettent certaines !anipulations du !7!e
&enre ?!atplotlib@ I!a&eA
Ouverture et visualisation de l"i!a&e
rotation@ recadra&e@ redi!ensionne!ent
Franck Delahaye - Observatoire de Paris
+
In L1M8 i!port scipy#!isc as sp!
In L'M8 0nature F sp!#i!read?Vnature#/p&VA
In L$M8 0nature
OutL$M8
array?LLL'''@ '),@ '**M@
L'1*@ ')'@ '*$M@
L'.9@ '$*@ ')2M@
###@
L'.1@ '$9@ '*)M@
L1,,@ '$9@ '*$M@
L1,+@ '$2@ '*1MM@
In L)M8 0nature#siTe
OutL)M8 *+2....
In L*M8 0nature#shape
OutL*M8 ?1'..@ 12..@ $A
In L2M8 b5Hnature F sp!#i!read?Vnature#/p&V@0lattenF1A
In L+M8 b5Hnature#siTe
OutL+M8 1,'....
In L9M8 b5Hnature#shape
OutL9M8 ?1'..@ 12..A
In L,M8 sp!#i!sho5?0natureA D cette co!!ande lance un pro&ra!!e de visualisation d"i!a&e
In L1.M8 sp!#i!sho5?b5HnatureA D pr(sent sur l"ordinateur# ?&v@ docu!ent<ie5er IA
In L+M8 i!port scipy#ndi!a&e as ndi
In L9M8 rnature F ndi#rotate?0nature@*.A
In L,M8 p!#i!sho5?rnatureA
In L1.M8 cropHnatureF 0natureL*..8-'.@9..8-$.M
In L11M8 sp!#i!sho5?cropHnatureA
In L1'M8 resiTeHnature F sp!#i!resiTe?nature@?$..@)..AA
In L1$M8 squareHnature F sp!#i!resiTe?nature@?$..@$..AA
In L1)M8 sp!#i!sho5?squareHnatureA
In L1*M8 sp!#i!sho5?resiTeHnatureA
6e 0or!at de la !atrice d(pend du type d"i!a&e ?couleur ou niveau de &risA
Il eiste des 0iltres pr(d(0inis#
On peut cr(er des !asques ou co!biner des i!a&es
1ote 8 6e !asque est une !atrice de bool(ens avec "true"# 6"a00ectation de valeur pour les (l(!ents
de !atrice de l"i!a&e se 0ait co!!e pour tout array#
Franck Delahaye - Observatoire de Paris
9
In L1.M8 i!port scipy as sp
In L11M8 aHb5 F sp#ones??1..@1..AA D &rayscale
In L1'M8 0or i in ran&e?1..A8
####8 0or / in ran&e?1..A8
####8 aHb5Li@/M F sp#rando!#uni0or!?.@'*2A
In L1$M 8 i!sho5?aHb5A
In L1)M8 a F sp#ones??1..@1..@$AA D i!a&e couleur -S;
In L1*M8 0or i in ran&e?1..A8
####8 0or / in ran&e?1..A8
####8 0or k in ran&e?$A8
####8 aLi@/@kM F sp#rando!#uni0or!?.@'*2A
In L12M 8 i!sho5?aA
In L1+M8 i!port scipy#ndi!a&e as spi
In L19M8 &ab5 F spi#&aussianH0ilter?aHb5@*A
In L1,M8 sp!#i!sho5?&ab5A
In L1+M8 y@ F np#o&ridL.8$..@.8)..M D Indices des coordonn(es des piels d"une i!a&e $..)..
In L19M8 centreH@ centreHy F 1*.@ '.. D coordonn(es du centre de l"i!a&e
In L1,M8 !ask F ??y - centeryAEE' J ? - centerAEE'AP 1*.EE' D !ask circulaire de rayon 1*. pi#
In L*$M8 res F sp!#i!resiTe?b5Hnature@?$..@)..AA
In L*)M8 resL!askMF. D application du !asque
In L**M8 sp!#i!sho5?resA
2 - !yt"on et les codes en # et $ortran
Python est d(velopp( en C ainsi la plupart des !(thodes (crites en C sont opti!is(es ce qui rend
leur e(cution rapide# Dans le cadre sp(ci0ique de pro/et on peut 7tre a!en( B devoir d(velopper
des routines qui n(cessitent beaucoup de calcul# Python sera certaine!ent !oins per0or!ant et
d(velopper dans son lan&a&e co!pil( habituel peut 7tre une solution pr(0(rable# On peut aussi
i!a&iner le cas oW toute la cr(ation de donn(es de base est 0aite par des routines d(/B eistantes
dans un lan&a&e co!pil( !ais qu"on d(sire coupler ces routines B un script de post-traite!ent
d(velopp( en lan&a&e de script#
Python per!et d"int(&rer des routines 0ortran et C dans un script# Clles sont char&(es co!!e des
!odules co!pl(!entaires# Pour cela il 0aut@ lors de la co!pilation@ &(n(rer un librairie
co!pr(hensible pour python#
2.1 - %outine $ortran
Dans le cas de routines 0ortran@ il eiste un "inter0aceur" sp(ci0ique qui est install( auto!atique!ent
lors de l"installation du !odule Scipy# Cet "inter0aceur" est f2py (Fortran to Python interface
generator). Il appelle le co!pilateur 0ortran de votre ordinateur 0++@ 0,.@ &0ortran ou i0ort pour la
co!pilation et a/oute une enveloppeQun conditionne!ent pour per!ettre l"i!portation dans les
scripts python# <oici un ee!ple#

Co!pilation avec 0'py# Cela &(n>re un !odule appel( hello#so
=tilisation dans python#
Franck Delahaye - Observatoire de Paris
,
C Fichier Fortran File hello#0
subroutine !yFortranSub ?aA
inte&er a
printE@ V3ello 0ro! FortranXV
printE@ VaFV@a
end
0'py -c -! hello hello#0
In L9M8 i!port hello
In L,M8 N hello
%ype8 !odule
;ase Class8 Otype "!odule"P
Strin& For!8 O!odule "hello" 0ro! "hello#so"P
1a!espace8 Interactive
File8 Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQhello#so
Docstrin&8
%his !odule "hello" is auto-&enerated 5ith 0'py ?version8'A#
Functions8
!y0ortransub?aA
#
2.2 - %outine #
Pour les routines en C il est eiste un "inter0aceur" ?5rapper ou cr(ateur d"enroba&eA appel( s5i&# Il
est pr(sent dans les paquets standards des distributions linu# On peut aussi le t(l(char&er B
l"adresse suivante http8QQ555#s5i&#or&Qdo5nload#ht!l ?pour 6inu ou 4indo5sA# Ce "5rapper"
n"est pas eclusive!ent pour Python !ais peut aussi &(n(rer un inter0aZa&e avec Perl@ [ava@ P3P@
-uby@ \R6 entre autres# <oici la proc(dure pour inclure les routines C dans un script python#
Pour le pro&ra!!e pr(c(dent (quivalant nous avons un pro&ra!!e en C@ un 0ichier "ent7te" ?#hA et
un 0ichier "in0or!ation" ?#iA suivant#
Il 0aut ensuite d(0inir le header ?no!HdeH0ichier#h@ ici chello#hA
Cn0in il 0aut d(0inir le 0ichier d"in0or!ation per!ettant de construire le "wrapper" no!H0ichier#i
6a cr(ation du !odule python passe par la cr(ation du 5rapper@ la co!pilation du code C et le
"linka&e" pour la cr(ation de la librairie#
Franck Delahaye - Observatoire de Paris
1.
In L1.M8 hello#
hello#HHclassHH hello#HHinitHH hello#HHsiTeo0HH
hello#HHdelattrHH hello#HHna!eHH hello#HHstrHH
hello#HHdictHH hello#HHne5HH hello#HHsubclasshookHH
hello#HHdocHH hello#HHpacka&eHH hello#HHversionHH
hello#HH0ileHH hello#HHreduceHH hello#0
hello#HH0or!atHH hello#HHreduceHeHH hello#!y0ortransub
hello#HH&etattributeHH hello#HHreprHH hello#so
hello#HHhashHH hello#HHsetattrHH
In L1.M8 hello#!y0ortransub?*A
%his is a 0ortran subroutine
a F *
Dinclude Ostdio#hP
Dinclude Vchello#hV
int croutine?int aA
]
print0?V3ello 0ro! C^nVA_
print0?V6e no!bre est `i ^nV@ aA_
a
QE File8 chello#h EQ
int croutine?int aA_
QE File8 chello#i EQ
`!odule chello
`]
Dde0ine S4ISHFI6CH4I%3HI1I%
Dinclude Vchello#hV
`a
int croutine?int aA_
On peut !aintenant acc(der au !odule dans les scripts python#
Pour plus de d(tails 8
http8QQ555#scipy#or&QF'py
http8QQcens#ioc#eeQpro/ectsQ0'py'eQusers&uideQinde#ht!l
http8QQ555#s5i&#or&
Franck Delahaye - Observatoire de Paris
11
s5i& -python chello#i D cr(ation du 5rapper haut niveau python
&cc -O' -0PIC -c chello#c D co!pilation
&cc -O' -0PIC -c chelloH5rap#c -IQusrQincludeQpython'#2 D co!pilation du 5rapper bas niveau C
&cc -shared chello#o chelloH5rap#o -o Hchello#so D cr(ation de la librairie
In L1M8 i!port chello
In L'M8 N chello
%ype8 !odule
;ase Class8 Otype "!odule"P
Strin& For!8 O!odule "chello" 0ro! "chello#py"P
1a!espace8 Interactive
File8 Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQchello#py
Docstrin&8
Ono docstrin&P
In L$M8 chello#
chello#HHbuiltinsHH chello#HHstrHH chello#HHclassHH chello#HHsubclasshookHH
chello#HHdelattrHH chello#Hchello chello#HHdictHH chello#Hne5class
chello#HHdocHH chello#Hob/ect chello#HH0ileHH chello#Hs5i&H&etattr
chello#HH0or!atHH chello#Hs5i&Hproperty chello#HH&etattributeHH chello#Hs5i&Hrepr
chello#HHhashHH chello#Hs5i&Hsetattr chello#HHinitHH
chello#Hs5i&HsetattrHnondyna!ic
chello#HHna!eHH chello#c chello#HHne5HH chello#croutine
chello#HHpacka&eHH chello#h chello#HHreduceHH chello#i
chello#HHreduceHeHH chello#o chello#HHreprHH chello#py
chello#HHsetattrHH chello#pyc chello#HHsiTeo0HH
In L$M8 chello#croutine?*A
3ello 0ro! C
6e no!bre est *
In L)M8 chello#croutine?2A
3ello 0ro! C
6e no!bre est 2
3 - !yt"on et la programmation o&'et
3.1 - %appel des principes de &ase de la !rogrammation (riente (&'et.
6a pro&ra!!ation structur(e tend B or&aniser le code en r(pondant B la question 'Que doit faire le
programme '# 6es traite!ents ou routines occupent le cbur de la pro&ra!!ation# : l"oppos(@ la
pro&ra!!ation orient(e ob/et place les donn(es au centre de l"or&anisation du code en tentant de
r(pondre B la question '!ur "uoi porte le programme '. Dans cette approche toute entit( est un
ob/et# =n ob/et co!prend un &roupe de donn(es appel(s attributs et un ense!ble de proc(dures@
appel(es m#thodes@ d(crivantQop(rant la !anipulation de l"ob/et# 6"ense!ble $ttributs % &#thodes
est re&roup( ou d(0ini par une 'lasse# ?6es cha!ps ci-dessous correspondent B des attributs
!odi0iables#A
Ce!ple 8 =n :rticle en stock dans un !a&asin est caract(ris( par 8
une r(0(rence
un pri hors tae
une quantit( #
Pour cet ob/et on peut d(0inir des !(thodes telles que 8
Pri%%C F Calculer le pri %%C
Pri-e!ise F Calculer le pri avec re!ise
Sortie:rticle F retirer du stock
Cntree:rticle F a/outer au stock
6e 0ait d"avoir tout re&roup( sous une !7!e entit( ?la classeA s"appelle l"encapsulation#
=ne notion i!portante ?apr>s classe@ encapsulationA est l"h(rita&e# 6"h(rita&e est utile lorsqu"un
ob/et peut 7tre d(clin( en sous-&roupe aillant des caract(ristiques sp(ci0iques# 6"ense!ble des
attributs et !(thodes co!!uns B tous les sous &roupes seront re&roup(s dans la classe !>re ?ou
parentA et chaque sous &roupe aura ses propres ]attributs-!(thodesa co!pl(!entaires d(0inis dans
une classe en0ant# 6ors de l"instanciation d"une classe en0ant@ on aura directe!ent acc>s au
attributsQ!(thodes de cette classe en0ant ainsi qu"au attributsQ!(thodes de la classe parent dont il
h(rite auto!atique!ent#
1ote 8 Il eiste des !(thodes priv(es caract(ris(es pas des underscores ?HHno!HH@ c0# sec#9 p$$A
Ce!ple 8 Par!i les articles on peut i!a&iner un traite!ent sp(ci0ique pour les articles p(ri!(s#
Ces articles@ en plus des attributs et !(thodes propres B tous les articles@ peuvent avoirs des
in0or!ations suppl(!entaires telles que le lieu de recycla&e oW il 0aut les renvoyer@ la perte
Franck Delahaye - Observatoire de Paris
1'
Cha!p
Cha!p Cha!p
Cha!p
Cha!p
Cha!p Cha!p
Cha!p
R(thode
R(thode
R(thode
Classe
0inanci>re &(n(r(e etc I
De 0aZon &(n(rique lKh(rita&e se pr(sente de la !ani>re suivante 8
Ce qui (quivaut B
Franck Delahaye - Observatoire de Paris
1$
Cha!p
Cha!p
Cha!p
Cha!p
R(thode R(thode
R(thode
Classe Cn0ant
R(thode
Cha!p
Cha!p Cha!p
Cha!p
Cha!p
Cha!p Cha!p
Cha!p
R(thode
R(thode
R(thode
Classe Cn0ant
Cha!p
Cha!p
Cha!p
Cha!p
R(thode
R(thode
R(thode
R(thode
Classe Parent
R(thode
R(thode
R(thode
Cha!p
Cha!p Cha!p
Cha!p
Cha!p
Cha!p Cha!p
Cha!p
1ote 8 Dans une classe en0ant il est possible de red(0inir ou !odi0ier une !(thode h(rit(e de la
classe parent pour l"adapter B l"utilisation sp(ci0ique pour la classe en0ant# Cependant cela ne
chan&era en rien les !(thodes d(0inies pour la classe parent B propre!ent parl(# %out ob/et@
instance de la classe parent@ n"aura pas acc>s B la !(thode !odi0i(e#
3.2 - )*inition de classe dans !yt"on
<oici un ee!ple de l"i!pl(!entation d"une classe tr>s basique# On a (crit dans un 0ichier no!!(
ClasseSi!ple#py la classe et on i!porte le !odule pour acc(der B la classe#
1ote 8 On re!arque qu"en plus de nos d(0initions ?attributs et !(thodesA il eiste aussi quelques
attributs d(/B pr(-d(0inis# C"est les cas de mc.((class(( mc.((doc(( mc.((module((. Ces
in0or!ations sont auto!atique!ent cr(es lors du char&e!ent du !odule# 6e 0ait de d(clarer une
classe i!pose l"attache!ent de ces (l(!ents de base B l"ob/et co!!e c"est le cas pour toute
d(claration ou char&e!ent d"ob/et# Cn e00et dans Python tout ob/et est d(/B d(0ini de 0aZon
&(n(rique dans le noyau de Python et poss>de de 0acto des attributs et !(thodes correspondant B sa
nature# 6orsqu"on ecrit " aF1" on instancie une classe de type "inte&er" et un ense!ble
d"attributsQ!(thodes sont d(/B pr(d(0inis# Il en est de !7!e pour une classe# 6a classe que l"on
d(clare auto!atique!ent h(rite de la "Super Classe" &(n(rique de python#
-appel 8 6es attributs sont accessibles par l"appel de leur no! et les !(thodes co!!e un appel de
0onction ?avec des parenth>ses#
1ote 8 Par convention toutes les !(thodes d(clar(es dans une classe doivent avoir en pre!ier
ar&u!ent 'self' (ou un autre mot) *oir anne+e ,)
Franck Delahaye - Observatoire de Paris
1)
class RaClasse8
""" Cette classe est un ee!ple de d(0inition avec un attribut et une !(thode
"""
!onHpi F $#1)
de0 !essa&e?sel0A8
print V<oici !on !essa&eV
In L1M8 i!port ClasseSi!ple - importation du module contenant la classe
In L'M8 !c F ClasseSi!ple#RaClasse?A - instanciation de la classe
In L$M8 N !c
%ype8 instance
;ase Class8 ClasseSi!ple#RaClasse
Strin& For!8 OClasseSi!ple#RaClasse instance at .1bc+9$.P
1a!espace8 Interactive
File8 Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQClasseSi!ple#py
Docstrin&8
Cette classe est un ee!ple de d(0inition avec un attribut et une !(thode
In L*M8 !c# L%:;M - .n retrou*e toutes les m#thodes et attributs associ#s / la classe.
!c#HHclassHH !c#HHdocHH !c#HH!oduleHH !c#!essa&e !c#!onHpi
In L*M8 !c#!onHpi
OutL*M8 $#1).............1
In L2M8 !c#!essa&e?A
<oici !on !essa&e
3.3 - !ort des +aria&les et o&'ets - Scopes and ,amespace
:ttention@ le probl>!e de la port(e des variables est cruciale de 0aZon &(n(rale et peut 7tre source
de di00icult(s dans le contete de la d(0inition de classe# Cn annee est report( un para&raphe de la
docu!entation du site python#or& concernant les espaces et la port(e des variables# : l"aide de
quelques ee!ples nous allons essayer d"y voir plus clair#
On reprend la classe pr(c(dente 8
Dans le cas ci-dessus les variables d(0inies dans les 0onctions ont une port(e se r(duisant B la
0onction unique!ent# Si on veut utiliser une variable dans plusieurs !(thodes de la classe il 0aut la
d(0inir hors des 0onctions et la r(0(rencer dans les 0onctions avec le pr(0ie self.
Dans lKee!ple suivant dans la !(thode !es<ar on appelle sel0#pi et dans !onHpi on ne pr(0ie
pas la variable#
Franck Delahaye - Observatoire de Paris
1*
class RaClasse8
""" Cette classe est un ea!ple de de0inition avec un atribut et une !ethode
"""
de0 !es<ar?sel0A 8
pi F $#1)
!essa&e F "" Ron !essa&e""
print pi@ !essa&e

de0 !onHpi?sel0A8
print pi
In L1M8 i!port ClasseCercle
In L'M8 !c F ClasseCercle#RaClasse?A
In L$M8 !c#!es<ar?A
$#1) Ron !essa&e
In L)M8 !c#!onHpi?A
---------------------------------------------------------------------------
1a!eCrror %raceback ?!ost recent call lastA
Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQOipython consoleP in O!oduleP?A
Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQClasseCercle#pyc in !onHpi?sel0A
') print pi@ !essa&e
'*
'2 de0 !onHpi?sel0A8
---P '+ print pi
'9
1a!eCrror8 &lobal na!e "pi" is not de0ined
class RaClasse8
""" Cette classe est un ee!ple de d(0inition avec un attribut et une !(thode
"""
pi F $#1)
de0 !es<ar?sel0A 8
print sel0#pi

de0 !onHpi?sel0A8
print pi
3.4 - Instanciation et Initialisation
:pr>s char&e!ent du !odule contenant les classes@ l"instanciation se 0ait par une a00ectation
co!!e pour une 0onction 8" man0ar'lass 1 mon(module.ma'lasse() "# Il est possible de d(0inir
une !(thode sp(ciale appel(e "((init((" qui per!et de 0aire ou d(0inir un ense!ble d"op(rations
qui sKe(cuteront d>s lKinstanciation de la classe#
Franck Delahaye - Observatoire de Paris
12
In L1M8 i!port ClasseSi!ple
In L'M8 !c F ClasseSi!ple#RaClasse?A
In L$M8 !c#!es<ar?A
$#1)
In L)M8 !c#!onHpi?A
---------------------------------------------------------------------------
1a!eCrror %raceback ?!ost recent call lastA
Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQOipython consoleP in O!oduleP?A
Qho!eQ0delahayeQ4O-YQCoursC1:PQPythonQ:vanceQClasseCercle#py in !onHpi?sel0A
'$ print sel0#pi
')
'* de0 !onHpi?sel0A8
---P '2 print pi D Il aurai 0allu 0aire l"appel avec le pr(0ie sel0#
'+
1a!eCrror8 &lobal na!e "pi" is not de0ined
D 0ichier Si!pleClasse#py
class RaClasse8
""" Cette classe est un ee!ple de d(0inition avec un attribut et une !(thode
"""
pi F $#1)
de0 HHinitHH?sel0A 8
i!port nu!py as np
print " Ron pi etait"@ sel0#pi
sel0#pi F np#pi
print " Ron pi est !aintenant "@ se0#pi
de0 !onH!essa&e?sel0A8
!essa&e F "" <oici !on !essa&e ""
print !essa&e
In L1M8 i!port Si!pleClasse
In L'M8 !c F Si!pleClasse#RaClasse?A
Ron pi etait $#1)
Ron pi est !aintenant $#1)1*,'2*$*,
In L$M8 !c#!es<ar?A
$#1)1*,'2*$*,
1ote 8 :ttention au d(clarations de variable de class et d"instance#
Si on d(clare une variable de class *ar2 et *ar2 de la !ani>re suivante 8
alors la variable *ar2 est un variable de class et la variable *ar2 est une variable d"instance# Ce qui
si&ni0ie que le chan&e!ent de sa valeur entrainera une !odi0ication de la valeur de var1 dans toute
les instances de cette classe tandis que *ar2 est ind(pendante dans chaque instance#
6es variables de class de chaque instance pointent vers le !7!e ob/et
1ote 8 :ttention@ si on chan&e une valeur de classe dans une instance c2.*ar21'new'@ alors cela
revient B d(clarer une nouvelle variable *ar2 pour l"instance c1 de la classe et de 0ait celle-ci n"est
plus reli(e B la variable de classe *ar2 initiale!ent d(0inie dans la classe# Donc tout chan&e!ent de
la variable de classe n"a00ectera plus c2.*ar2

Franck Delahaye - Observatoire de Paris
1+
D 0ichier classHsi!ple#py
class RaClasse8
""" Cette classe est un ee!ple de d(0inition avec un attribut et une !(thode
"""
var1 F $#1)
de0 HHinitHH?sel0A 8
sel0#var' F '#
D dans ipython
In L1M8 i!port classHsi!ple as cl D i!port du !odule contenant la classe
In L'M8 c1Fcl#RaClasse?A D pre!iere instance de la classe
In L$M8 c'Fcl#RaClasse?A D deuie!e instance de la classe
In L)M8 print c1#var1@ c1#var'@ c'#var1@ c'#var'
OutL)M 8 1#. '#. 1#. '#.
In L*M8 cl#RaClasse#var1 F "1ouvelle <aleur" D chan&e!ent de la valeur de la var de class "var1"
In L2M8 print c1#var1@ c1#var'@ c'#var1@ c'#var'
OutL2M 8 1ouvelle <aleur '#. 1ouvelle <aleur '#.
In L+M8 cl#RaClasse#var' F "Ct la var'N" D tentative sur la "var'"
In L9M8 print c1#var1@ c1#var'@ c'#var1@ c'#var'
OutL9M 8 1ouvelle <aleur '#. 1ouvelle <aleur '#. D cela n"a00ecte pas la valeur "sel0#var'"
et ce !7!e pour toute nouvelle instance#
In L,M8 c$Fcl#RaClasse?A
In L1.M8 print c$#var1@ c$#var'
OutL1.M 8 1ouvelle <aleur '#.
In L11M8 c$#var' F "1e5 var'"
In L1'M8 print c1#var'@ c$#var'
OutL1'M 8 '#. 1e5 var'
D 0ichier classHsi!ple#py
In L'.M8 id?cl#RaClasse#var1AFFid?c1#var1AFFid?c'#var1AFFid?c$#var1A
OutL'.M8 %rue
In L'1M8 id?cl#RaClasse#var1A@id?c1#var1A@id?c'#var1A@id?c$#var1A
OutL'1M8 ?'2).9'12@ '2).9'12@ '2).9'12@ '2).9'12A
6es variables d"instance ?ayant le pr(0ie sel0#A repr(sentent des ob/ets di00(rents# 6a valeur de ces
variables n"est pas a00ect(es dans la classe !ais unique!ent B l"instanciation# Donc il n"y a pas
d"ob/et class.*ar2 !ais unique!ent des ob/ets instance.*ar2. Donc il n"est pas possible de !odi0ier
toutes les variables var' de chaque instance d"un coup co!!e !ontr( pr(c(de!!ent pour var1
?variable de classeA#
6a encore les variables *ar2 des di00(rentes instances pointent vers un !7!e ob/et# Rais si on
d(cide de chan&er la valeur dans l"une des instances alors@ lB encore@ on cr(e un nouvel ob/et#
Il 0aut 7tre ri&oureu dans la d(claration et l"utilisation de variables pour ne pas perdre la valeur en
cours de script et ne pas polluer inutile!ent lKenvironne!ent avec un no!bre d"ob/ets non utilis(s#
Franck Delahaye - Observatoire de Paris
19
D 0ichier classHsi!ple#py
In L)M8 id?cl#RaClasse#var'A
---------------------------------------------------------------------------
:ttributeCrror %raceback ?!ost recent call lastA
Qho!eQ0delahayeQ%estHSpiderQOipython consoleP in O!oduleP?A
:ttributeCrror8 class RaClasse has no attribute "var'"
In L*M8 id?c1#var'A@id?c'#var'A@id?c$#var'A
OutL*M8 ?1$2*$')9@ 1$2*$')9@ 1$2*$')9A
In L+M8 id?c1#var'AFFid?c'#var'AFFid?c$#var'A
OutL+M8 %rue
In L9M8 c1#var' F *
In L,M8 id?c1#var'AFFid?c'#var'AFFid?c$#var'A
OutL,M8 False
In L1.M8 id?c1#var'A@id?c'#var'A@id?c$#var'A
OutL1.M8 ?1121).).@ 1$2*$')9@ 1$2*$')9A
3.5 - -ritage
Franck Delahaye - Observatoire de Paris
1,
class :rticleHParent?A8
""" Ceci est la classe parent# Clle contient la d(0inition d"un article#
"""
de0 HHinitHH?sel0@no!A8
sel0#no! F no!
de0 setHre0?sel0@re0A8
sel0#re0 F re0
de0 setHpri3%?sel0@pri3%A8
sel0#pri3% F pri3%
de0 setHquantity?sel0@qtyA8
sel0#qty F qty
de0 addHstock?sel0@valA8
sel0#qty JF val
de0 re!oveHstock?sel0@ valA8
sel0#qty -F val
de0 priH%%C?sel0A8
tva F 1,#2
priH%%C F sel0#pri3% E ?1# J tvaQ1..#A
return priH%%C
de0 priHre!ise?sel0@tauHre!iseA8
priHre!ise F sel0#priH%%C?A E ?1# - tauHre!iseQ1..#A
print rV Pri apres re!ise 8 `$#'0 8 V `priHre!ise
DDDD Classe en0ant DDDDD
class :rtPeri!eHCn0ant?:rticleHParentA8
""" Cette classe h(rite de tous les attributs et !(thodes de la classe
parent et y a/oute ces propres attributs et !(thodes#
"""
de0 setHDate6i!ite?sel0@/our@!ois@anneeA8
""" 6a date li!ite doit 7tre une liste de $ (l(!ents#
"""
i!port dateti!e as dt
sel0#dateHli!ite F dt#date?annee@!ois@/ourA
today F dt#dateti!e#today?A
i0 sel0#dateHli!ite O today#date?A8
Dprint V6"article `s est peri!e# 1ous le retirons du stock#V@` sel0#no!
sel0#re!oveHstock?sel0#qtyA
6ors de la d(claration de la classe en0ant on passe co!!e para!>tre la classe parent# :insi cette
classe en0ant h(rite auto!atique!ent des attributs et !(thodes de la classe parent#
Dans le script ci-dessus nous avons lKinstanciation de la classe parent pour l"article botte et '
instanciations de la classe en0ant pour les articles creme et gel# 6"instanciation de la classe en0ant
se 0ait de la !7!e !ani>re que la classe parent car elle a h(rit( de la !(thode d"initialisation
HHinitHH#
:pr>s avoir d(0ini les dates de p(re!ption pour les deu produits creme et gel@ l"action de retirer
du stock est auto!atique!ent lanc(e co!!e on peut le voir ci-dessous dans lKe(cution du script#
Franck Delahaye - Observatoire de Paris
'.
i!port classe3erita&e D i!port du !odule contenant les deu classes Parent et Cn0ant
botte F classe3erita&e#:rticleHParent?"botte"A D instanciation de la classe parent pour 1 article
botte#setHre0?1*')A
botte#setHquantity?'*A
botte#setHpri3%?1..A
botte#priH%%C?A
botte#priHre!ise?$.#A
cre!e F classe3erita&e#:rtPeri!eHCn0ant?"Cre!e <isa&e"A D instanciation de la classe en0ant
cre!e#setHquantity?2.A
cre!e#setHpri3%?+*#A
cre!e#qty
cre!e#setHDate6i!ite?1'@1@'.1'A
cre!e#qty
&el F classe3erita&e#:rtPeri!eHCn0ant?"Sel"A D instanciation de la classe en0ant pour l"article &el
&el#setHquantity?2.A
&el#setHpri3%?1*#A
&el#qty
&el#setHDate6i!ite?1'@1@'.1.A
In L1M8 i!port classe3erita&e
In L$M8 botte F classe3erita&e#:rticleHParent?"botte"A
In L)M8 botte#setHre0?1*')A
In L*M8 botte#setHquantity?'*A
In L2M8 botte#setHpri3%?1..A
In L+M8 botte#priH%%C?A
OutL+M8 11,#*,,,,,,,,,,,,,
In L9M8 botte#priHre!ise?$.#A
Pri apres re!ise 8 9$#+' 8
In L1.M8 cre!e F classe3erita&e#:rtPeri!eHCn0ant?"Cre!e <isa&e"A
In L11M8 cre!e#setHquantity?2.A
In L1'M8 cre!e#setHpri3%?+*#A
- !yt"on et les .idgets
:0in de rendre plus si!ples@ plus intuitives ou plus eplicites certaines applications@ on tend B
s"(loi&ner de la li&ne de co!!ande qui n(cessite la connaissance de tout un vocabulaire
sp(ci0ique@ une syntae par0ois (sot(rique pour basculer sur l"utilisation d"i!a&e@ iccne et autres
boutons 0avorisant l"utilisation de la souris et une approche visuelle# Ce d(veloppe!ent de
l"utilisation d"une inter0ace &raphique entre l"utilisateur et la !achine ?inter0ace =tilisateur-
Rachine ou 3o!!e-Rachine I3R@ -Sraphical =ser Inter0ace -S=I- en an&laisA se &(n(ralise
pour les applications quelles qu"elles soient# 6"ense!ble des ob/ets &raphiques constituant une
application appel( un 5id&et#
Ce passa&e de la li&ne de co!!ande B l"inter0ace &raphique se 0ait en plusieurs (tapes# =ne (tape
de "desi&n" per!ettant de d(0inir la position relative des boutons et autres ob/ets &raphiques@ leur
apparence@ ayant pour but d"opti!iser l"er&ono!ie du 5id&et# Cnsuite il y a le d(veloppe!ent de
codesQscripts pour d(0inir les actions de ces di00(rents ob/et &raphiques# Il eiste plusieurs
biblioth>ques d"inter0aces &raphiques par!i lesquelles on peut no!!er %k@ S%k@ Qt# 44id&et#
Celles ci per!ettent de cr(er des S=I B l"aide d"ob/ets pr(d(0inis ?boutons@ Tone de tete@ !enu ###A#
Il y eiste des outils pour le desi&n de S=I ? Q% desi&ner@ 4&lade IA per!ettant de construire
des 5id&ets de 0aZon &raphique@ de visualiser et travailler sur la !ise en place des di00(rents
(l(!ents ?boutons@ !enus@ cha!ps de saisie IA de 0aZon si!ple et i!!(diate# Ces biblioth>ques
co!prennent un ense!ble d"ob/ets ?attributs et !(thodesA qui peuvent 7tre !is en buvre pour la
r(alisation de la S=I# Ces biblioth>ques sont accessible sous python via di00(rents !odules d(riv(s
des biblioth>ques &raphiques initiales %k ou Qt# :insi on peut no!!er %kinter@ PyQt #
Franck Delahaye - Observatoire de Paris
'1
In L1$M8 cre!e#qty
OutL1$M8 2.
In L1)M8 cre!e#setHDate6i!ite?1'@1@'.1'A
In L1*M8 cre!e#qty
OutL1*M8 2.
In L12M8
In L1+M8 &el F classe3erita&e#:rtPeri!eHCn0ant?"Sel"A
In L19M8 &el#setHquantity?2.A
In L1,M8 &el#setHpri3%?1*#A
In L'.M8 &el#qty
OutL'.M8 2.
In L'1M8 &el#setHDate6i!ite?1'@1@'.1.A D Date li!ite O %oday alors qty F .
In L''M8 &el#qty
OutL''M8 .
<oici un ee!ple de pro&ra!!e de cr(ation d"inter0aces &raphiques ?Qt desi&nerA

dditeurs de tete@ lo&iciels de traite!ent d"i!a&e ou applications sp(ci0iques sont des 5id&ets#
Franck Delahaye - Observatoire de Paris
''
Pour la cr(ation d"un 5id&et si!ple nous utiliserons directe!ent la biblioth>ques %kinter dans le
cadre de ce cours# 6es liens vers les outils de desi&n des 5id&ets sont donn(s B la 0in de cette
section#
:0in de se 0a!iliariser avec les di00(rents co!posants voici un ee!ple si!ple de 5id&et#
Sur le script pr(c(dent on re!arque les di00(rentes parties pr(sentes dans la d(0inition du 5id&et#
De 0aZon &(n(rale chaque co!posant est co!prend un ense!ble d"attributs d"apparence ?tete@
couleurs@ &(o!(trie IA et d"action ?positionne!ent@ co!!ande IA#
Franck Delahaye - Observatoire de Paris
'$
0ro! %kinter i!port E D i!portation de tous les ob/ets de %kinter dans le na!espace
class :pplication?Fra!eA8 D D(claration de la classe :pplication qui h(rite des ob/et de Fra!e
de0 sayHhi?sel0A8 D d(0inition d"un 0onction de l"application
print Vhi there@ everyoneXV
de0 create4id&ets?sel0A8 D D(0inition de la 0onction cr(ant la partie &raphique
sel0#Q=I% F ;utton?sel0A D les boutons@ leur no! et leur action#
sel0#Q=I%LVtetVM F VQ=I%V
sel0#Q=I%LV0&VM F VredV
sel0#Q=I%LVco!!andVM F sel0#quit ;outon ""Q=I%""
sel0#Q=I%#pack?]VsideV8 Vle0tVaA
sel0#hiHthere F ;utton?sel0A
sel0#hiHthereLVtetVM F V3elloV@
sel0#hiHthereLVco!!andVM F sel0#sayHhi ;outon ""hiHthere "" ?:ttention le tet sur le
sel0#hiHthere#pack?]VsideV8 Vle0tVaA bouton est ""3ello""
de0 HHinitHH?sel0@ !asterF1oneA8
Fra!e#HHinitHH?sel0@ !asterA Cnse!ble d"actions lanc(es B l"initialisation
sel0#pack?A
sel0#create4id&ets?A
app F :pplication?A Instanciation
app#!ainloop?A lance!ent de l"application
python si!ple4id&et#py
lance!ent du 5id&et
:ction du bouton 3ello
Fen7tre du 5id&et
1ote 8 Dans le /ar&on des S=I@ chaque entit( ou ob/et ?bouton@ co!bobo@ label IA est appel(
5id&et# :insi on cr(e une application en asse!blant plusieurs 5id&ets de base#
Chacun des 5id&ets de bases ?5b pour la suiteA sont des instances de sous classes d"une classe
&(n(rique "4id&et" de %kinter# Cette classe &(n(rique n"est pas instanciable B propre!ent parler
!ais re&roupe les (l(!ents co!!uns B tous les 5b# 6orsqu"on instancie un 5b@ on instancie une
classe en0ant de la classe "%kinter#4id&et"" #
On peut pr(ciser les options du 5b lors de lKinstanciation ou a posteriori#
Sur l"a00ectation des options apr>s instanciation d"un 5b on peut le 0aire de ' !ani>res di00(rentes
?illustr(es ci-dessusA# On peut obtenir les di00(rentes options accessibles par l"aide en li&ne sur
l"instance du 5b#
Dans le cas pr(sent@ la !ise en place est d(l(&u(e B un co!posant invisible appel( "packer" qui &>re
auto!atique!ent la disposition relative des 5bs# ? pack?A A# Cependant il est possible de passer des
para!>tres pour une disposition personnalis(e#
Franck Delahaye - Observatoire de Paris
')
i!port %kinter as tk
tk#6abel?tetFV%ete du 6abelVA#pack?A
tk#;utton?tetFVtet du ;outonVA#pack?A Instanciation avec option et !ise en place
D--------------------------------- Ou ---------------------------------------------------
i!port %kinter as tk
lbl1 F tk#6abel?tetFV%ete du 6abelVA Instanciation des 5b
btHquit F tk#;utton?A
btHquit#con0i&? tet F VQuitterV A :00ectation des options
btHquitL"co!!and"M F VquitV
lbl1#pack?A Rise en place dans la 0en7tre principale
btHquit#pack?A
In L11M8 N btHquit
Strin& For!8 #'1,*,)*2
1a!espace8 Interactive
File8 QusrQlibQpython'#2Qlib-tkQ%kinter#py
Docstrin&8
;utton 5id&et#
Constructor Docstrin&8
Construct a button 5id&et 5ith the parent R:S%C-#
S%:1D:-D OP%IO1S
activeback&round@ active0ore&round@ anchor@
back&round@ bit!ap@ border5idth@ cursor@ disabled0ore&round@ 0ont@ 0ore&round
hi&hli&htback&round@ hi&hli&htcolor@ hi&hli&htthickness@ i!a&e@ /usti0y@
pad@ pady@ relie0@ repeatdelay@ repeatinterval@ take0ocus@ tet@ tetvariable@
underline@ 5raplen&th
4IDSC%-SPCCIFIC OP%IO1S
co!!and@ co!pound@ de0ault@ hei&ht@
overrelie0@ state@ 5idth
.1 - .idget de &ase - /&
Franck Delahaye - Observatoire de Paris
'*
I!port %kinter as tk
51 F tk#%k?A
5bHlabel F tk#6abel?51@tetFV6abelVA#pack?A
5' F tk#%k?A
5bHbouton F tk#;utton?5'@tet F V;outonVA#pack?A
5$F tk#%k?A
lblHsaisie F tk#6abel?5$@ tetFVCha!p de saisieVA#pack?sideFtk#6CF%A
5bHcha!pSaisie F tk#Cntry?5$A
5bHcha!pSaisie#pack?A
5)Ftk#%k?A
lblHrb F tk#6abel?5)@ tetFV;outon radioVA#pack?sideFtk#6CF%A
5bH-adio;utton F tk#-adiobutton?5)A
5bH-adio;utton#pack?A

5*Ftk#%k?A
lblHrb F tk#6abel?5*@ tetFVSpinboVA#pack?sideFtk#6CF%A
5bHSpinbo F tk#Spinbo?5*@valuesF?VSquareV@V%rian&leV@VCircleVAA 5bHSpinbo F tk#Spinbo?5*@valuesF?VSquareV@V%rian&leV@VCircleVAA
5bHSpinbo
52Ftk#%k?A
lblHrb F tk#6abel?52@ tetFV6istboVA
5bH6ist F tk#6istbo?52A
5bH6ist#insert?tk#C1D@V-edVA
5bH6ist#insert?tk#C1D@V;lueVA
5bH6ist#insert?tk#C1D@VSreenVA
5bH6ist#pack?A
5+F%k?A
5+#&eo!etry?V'..1..VA
paneFtk#Paned4indo5?orientF3O-IUO1%:6A _D ou <C-%IC:6
pane#pack?epandFVyesV@0illFVbothVA
le0tFtk#6abel?pane@tetFVCct( &aucheV@b&FVyello5VA
ri&htFtk#6abel?pane@tetFVCct( droiteV@b&FV5hiteVA
pane#add?le0tA
pane#add?ri&htA
5+#!ainloop?A
59Ftk#Fra!e?A D c"est /uste un cadre ?visible ou invisibleA qui /oue le rcle de conteneur et per!et
de d(li!iter les di00(rentes Tone de la 0en7tre d"application#
.2 - 0e placement des /&s dans la *en1tre
Pour l"or&anisation des 5b sur la 0enetre principale@ il eiste plusieurs !(thodes# Celles ci sont
associ(es auto!atique!ent au 5b# 6es deu principau &estionnaires de positionne!ent sont le
"packer" et le "&ridder"# On y acc>de par les !(thodes respectives #pack?A et #&rid?A#
.2.1 - 0e !ac2er 3
Syntae wb.pack(33option)
rappel8 EEoption si&ni0ie le passa&e de para!>tres optionnels sous 0or!e
wb.pack(param2 1 *al2) param2 1 *al2 ..)
6es para!>tres possibles 8
side F 6CF% ou -IS3% ou %OP ou ;O%%OR
Il d(ter!ine le bord contre lequel se placera le 5b dans son 5bHparent#
e+pand F . ou 1# Si 1 5b s "(tend pour re!plir l"espace de son parent#
fill F 1O1C@ \@ e@ ;O%3# -e!plit l"espace suppl(!entaire allou( par le packer en
plus des di!ensions !ini!ales du 5b dans la?lesA direction?sA indiqu(e?sA par la
valeur du para!>tre#
Il est asseT pratique de 0aire la !ise en place des 5bs avec un ense!ble de frame parents qui
/ouent le rcle de conteneur de 5b et d(li!itent ainsi les di00(rents espaces de la 0en7tre#
Franck Delahaye - Observatoire de Paris
'2
D -E- codin&8 ut0-9 -E-
i!port %kinter as tk
class ResPositions8
de0 HHinitHH?sel0@!aster4A8
sel0#place!ent?!aster4A
de0 place!ent?sel0@!aster4A8
0rHprincipal F tk#Fra!e?!aster4@border5idthF1A
0rH=pper F tk#Fra!e?0rHprincipal@border5idthF1@relie0 F VraisedVA
0rH6o5er F tk#Fra!e?0rHprincipal@border5idthF1@relie0 F VsunkenVA
0rH=le0t F tk#Fra!e?0rH=pper@border5idthF1@relie0 F VraisedVA
0rH=ri&ht F tk#Fra!e?0rH=pper@border5idthF1@relie0 F VraisedVA

lblH=6Ftk#6abel?0rH=le0t@tetFVFra!e6CF%?Fra!e%OPAVA#pack?sideFtk#6CF%A
lblH=-Ftk#6abel?0rH=ri&ht@tetFVFra!e-IS3%?Fra!e%OPAVA#pack?sideFtk#-IS3%A
lblH;;Ftk#6abel?0rH6o5er@tetFVFra!e;O%%OR?Fra!e;O%%ORAVA#pack?sideFtk#;O%%ORA

0rHprincipal#pack?sideFtk#%OP@ epandF1@0illFtk#;O%3A
0rH=pper#pack?side F tk#%OP@ epandF1@0illFtk#;O%3A
0rH6o5er#pack?side F tk#;O%%OR@ epandF1@0illFtk#;O%3A
0rH=le0t#pack?side F tk#6CF%@ epandF1@0illFtk#;O%3A
0rH=ri&ht#pack?side F tk#-IS3%@ epandF1@0illFtk#;O%3A
de0 !ain?A8
!aster4Ftk#%k?A
!aster4#title?VPackerVA
!aster4#&eo!etry?V2..)..VA
!5id&et F ResPositions?!aster4A
!aster4#!ainloop?A
!ain?A
.2.2 - 0e gridder
6e &ridder utilise une &rille sur laquelle on place les 5bs par des coordonn(es de li&nes et colonnes
et pour lesquelles on eplicite la place occup(e#
Syntae wb.grid(33option)
6es para!>tres possibles 8
column 4 Colonne dans laquelle est plac( le 5b
columspan 4 %aille en no!bre de colonnes
row 4 6i&ne dans laquelle est plac( le 5b
rowspan 4 %aille en no!bre de li&nes
ipad+)ipady 4 1o!bre de piels ?en et y respective!entA pour (tendre le 5b# 6a
cellule s"adapte B cette nouvelle taille#
pad+) pady 4 1o!bre de piels ?en et y respective!entA pour (tendre la cellule du
5b# Ceci revient B au&!enter l"espace entre plusieurs 5bs
sticky F " "@ 1@C@S@4@1C@S4### Indique oW coller le 5b B l"int(rieur de la cellule# 6es
points cardinau (tant associ(s au bords ou coins de la cellule# " " indique centr(
dans la cellule#
Si aucune option n"est indiqu(e@ alors la prochaine cellule disponible qui est utilis(e#
:ttention@ un 5b a une di!ension !ini!ale@ celle ci d(ter!inera la taille de la cellule# Si
di00(rents 5bs ont des tailles di00(rentes@ alors la taille de la colonne ou li&ne prendra la taille de la
taille du plus &rand 5b pr(sent dans la !7!e colonne ou li&ne# <oire les ee!ples ci dessous#
Franck Delahaye - Observatoire de Paris
'+
class ResPositions'8
de0 HHinitHH?sel0@!aster4A8
sel0#place!ent?!aster4A
de0 place!ent?sel0@!aster4A8
0or l in ran&e?$A8
0or c in ran&e?.@)@'A8
tk#6abel?!aster4@tetF"6`sC`s" `?l@cA@relie0F"sunken"A#&rid?ro5Fl@colu!nFcA
0or c in ran&e?1@)@'A8
tk#;utton?!aster4@tetF";t `s `s" `?l@cAA#&rid?ro5Fl@colu!nFcA
Dtk#;utton?!aster4@tetF";t `s `s" `?l@cAA#&rid?ro5Fl@colu!nFc@colu!nspan F cspan@ipady F '.A

class ResPositions$8
de0 HHinitHH?sel0@!aster4A8
sel0#place!ent?!aster4A
de0 place!ent?sel0@!aster4A8
0or l in ran&e?$A8
0or c in ran&e?.@)@'A8
tk#6abel?!aster4@tetF"6`sC`s" `?l@cA@relie0F"sunken"A#&rid?ro5Fl@colu!nFcA
0or c in ran&e?1@)@'A8
cspan F 1
i0 c FF$8cspan F '
tk#;utton?!aster4@tetF";t `s `s" `?l@cAA#&rid?ro5Fl@colu!nFc@colu!nspan F cspanA
tk#;utton?!aster4@tetF";outon ) col# C"A#&rid?colu!nspan F )@stickyFtk#CA
tk#;utton?!aster4@tetF";outon 1 col#"A#&rid?A
tk#;utton?!aster4@tetF";outon ) col# ipad 2. ipady F 1."A#&rid?colu!nspan F )@ipad F 2.@ipady F 1.A
tk#;utton?!aster4@tetF";outon 1c pad"A#&rid?ro5F+@pad F *A
tk#;utton?!aster4@tetF";outon 1c pad"A#&rid?ro5F+@colu!n F 1@ padF*A
tk#;utton?!aster4@tetF";outon 1c pady"A#&rid?ro5F9@colu!n F .@ padyF*A
;ien sfr on peut co!biner le &ridder avec un ense!ble de cadres@ ainsi les redi!ensionne!ents de
cellule i!pos(s par les 5bs ou !odi0ications par le &ridder n"a00ectent que la &rille associ(e B un
cadre sp(ci0ique#

.3 - 0es menus
Dans les ee!ples suivants nous i!pl(!entons des !enus et sous !enus avec des co!!andes
associ(es#
Franck Delahaye - Observatoire de Paris
'9
class ResPositions)8
de0 HHinitHH?sel0@!aster4A8
sel0#place!ent?!aster4A
de0 place!ent?sel0@!aster4A8
0ra!e1 F tk#Fra!e?!aster4@border5idthF1@relie0F"sunken"A
0ra!e' F tk#Fra!e?!aster4@border5idthF1@relie0 F "sunken"A
0or l in ran&e?$A8
0or c in ran&e?.@)@'A8
tk#6abel?0ra!e1@tetF"6`sC`s" `?l@cA@relie0F"sunken"A#&rid?ro5Fl@colu!nFcA
0or c in ran&e?1@)@'A8
cspan F 1
i0 c FF$8cspan F '
tk#;utton?0ra!e1@tetF";t `s `s" `?l@cAA#&rid?ro5Fl@colu!nFc@colu!nspan F cspanA
tk#;utton?0ra!e'@tetF";outon ) col# C"A#&rid?colu!nspan F )@stickyFtk#CA
tk#;utton?0ra!e'@tetF";outon 1 col#"A#&rid?A
tk#;utton?0ra!e'@tetF";outon ) col# ipad 2. ipady F 1."A#&rid?colu!nspan F )@ipad F 2.@ipady F 1.A
tk#;utton?0ra!e'@tetF";outon 1c pad"A#&rid?ro5F+@pad F *A
tk#;utton?0ra!e'@tetF";outon 1c pad"A#&rid?ro5F+@colu!n F 1@ padF*A
tk#;utton?0ra!e'@tetF";outon 1c pady"A#&rid?ro5F9@colu!n F .@ padyF*A
0ra!e1#&rid?stickyFtk#4A
0ra!e'#&rid?A
<oici un ee!ple de 5id&et plus co!pliqu( co!binant plusieurs (l(!ents# Dans le code
correspondant ?pr(sent( dans les pa&es suivantesA les actions du cha!p de saisie et du bouton
"rechercher" n"ont pas (t( cod(s# Cela est r(serv( pour le %P#
Franck Delahaye - Observatoire de Paris
',
59 F tk#%k?A
59#&eo!etry?V$..*.VA
- 5#finition d'une action
de0 chtitre?choiA8
59#title?choiA
- 'r#ation de la barre de menu4
!enuP F tk#Renu?59A - instanciation d'un ob6et menu associer au wb w7 8 "ui est la fen9tre principale.
- 'r#ation du menu fichier4
!0ichier F tk#Renu?!enuP@ tearo00F.A - instanciation d'un ob6et menu 'mfichier' associer au menuP
!enuP#addHcascade?labelFVFichierV@!enuF!0ichierA - a6out de l'ob6et mfichier dans le menuP
!0ichier#addHco!!and?labelFVQuitV@ co!!andF59#destroyA - a6out d'une commande dans le menu
mfichier
- 'r#ation du menu $bout
!:bout F tk#Renu?!enuP@ tearo00F.A - instanciation d'un ob6et menu 'm$bout' associer au menuP
!enuP#addHcascade?labelFV:boutV@!enuF!:boutA - a6out de l'ob6et mfichier dans le menuP
- 'r#ation du sous menu $uteur dans le menu $bout
s!:uteur F tk#Renu?!:bout@ tearo00F.A
!:bout#addHcascade?labelFV:uteurV@!enuFs!:uteurA
- 'r#ation des sous sous menu :om et Pr#nom au"uelle on affecte une fonction.
s!:uteur#addHco!!and?labelFV1o!V@ co!!andFla!bda 8 chtitre?"Ry 1a!e is ;ond"AA
s!:uteur#addHco!!and?labelFVPreno!V@ co!!andFla!bda 8 chtitre?"[a!es ;ond"AA
- afficher le menu
59#con0i&?!enuF!enuPA
59#!ainloop?A
Franck Delahaye - Observatoire de Paris
$.
i!port %kinter as tk
D -E- codin&8 ut0-9 -E-
i!port %kinter as tk
0ro! tkFileDialo& i!port askopen0ilena!e
class RonH:pplication8
DDDD Partie de desi&n DDDD
D Fenetre Principale
de0 HHinitHH?sel0@!aster4A8
""" Initialisation8 cr(e tous les (l(!ents du 5id&et B l"instanciation# """
!ain4 F tk#Fra!e?!aster4A
sel0#RakeRenubar?!aster4A
sel0#Rake=pper?!ain4A
sel0#Rake6o5er?!ain4A
!ain4#pack?A
return
D Renu
de0 RakeRenubar?sel0@!ain4A8
""" ;arre des !enu de la 0enetre principale# """
!H!enuP F tk#Renu?!ain4A
!H0ichier F tk#Renu?!H!enuP@ tearo00 F .A
!H!enuP#addHcascade?labelFVFichierV@!enu F !H0ichierA
!H0ichier#addHco!!and?labelFVOuvrirV@ co!!and F la!bda8 sel0#c!dHouvrir?AA
!H0ichier#addHco!!and?labelFVQuitterV@ co!!and F !ain4#destroyA
!H:bout F tk#Renu?!H!enuP@ tearo00 F .A
!H!enuP#addHcascade?labelFV:boutV@!enu F !H:boutA
!H:bout#addHco!!and?labelFV<ersionV@ co!!andFla!bda8 sel0#c!dHversion?AA
!ain4#con0i&?!enu F !H!enuPA
de0 Rake=pper?sel0@!ain4A8
""" Partie Sup(rieur de la 0enetre principale """
cadreS F tk#Fra!e?!ain4A
sel0#lblHsaisie F tk#6abel?cadreSA
sel0#lblHsaisieL"tet"M F V%ete recherch(8V
sel0#entHsaisie F tk#Cntry?cadreSA
sel0#btHrecherche F tk#;utton?cadreSA
sel0#btHrechercheL"tet"M F V-echercherV
D Positione!ent de tous les ele!ents de la partie suup(rieure
cadreS#pack?sideFtk#%OPA
sel0#lblHsaisie#pack?sideFtk#6CF%A
sel0#entHsaisie#pack?sideFtk#6CF%A
sel0#btHrecherche#pack?sideFtk#-IS3%A
cadreS#pack?sideFtk#%OPA
de0 Rake6o5er?sel0@!ain4A8
""" Partie in0erieure de la 0en7tre principale# """
cadreI F tk#Fra!e?!ain4A
sel0#ttHtete F tk#%et?cadreI@back&roundF"5hite"A
sel0#ttHtete#insert?"1#."@""" Cecie est la Tone de tete"""A
scroll F tk#Scrollbar?cadreIA
sel0#ttHtete#con0i&ure?yscrollco!!and F scroll#setA
sel0#ttHtete#pack?side F tk#6CF%A
scroll#pack?side F tk#-IS3%@0ill F tk#eA
cadreI#pack?side F tk#;O%%ORA
return

PyQt n"est pas abord( ici !ais l"esprit reste le !7!e# Il eiste lB encore de no!breuses r(0(rences
dont voici un etrait tr>s restreint# Celles ci !"ont per!is pr(parer ce cours#
""Python en concentr( Ranuel de r(0(rence"" :# Rartelli@ ed# O"-eilly ?Pr(sent dans la
biblioth>que de l"Observatoire de ParisA
http8QQ&nupro&#in0oQpro&QpythonQp5id&et#php
http8QQdocs#python#or&QlibraryQtkinter#ht!l
Franck Delahaye - Observatoire de Paris
$1
DDDD Partie co!porte!ents et actions
de0 c!dHouvrir?sel0A8
""" Co!!ande d"ouverture d"un 0ichier et a00icha&e du contenu dans la Tone tete#
"""
0ilena!e F askopen0ilena!e?0iletypesFL?Vall0ilesV@VEVA@?Vpython0ilesV@VE#pyVAMA
!y0ile F open?0ilena!e@"r"A
tt F !y0ile#read?A
sel0#ttHtete#insert?"1#."@" "A
sel0#ttHtete#insert?"1#."@ttA
return 0ilena!e
de0 c!dHversion?sel0A8
""" Ouvre une 0enetre et a00iche la vesion#
"""
!s&H!as F tk#%k?A
!s&Hlbl F tk#6abel?!s&H!asA
!s&HlblL"tet"M F VCeci est la version .#.#1V
!s&Hlbl#pack?A
!s&H!as#!ainloop?A
de0 !ain?A8
""" Ceci est l"ense!ble des co!!andes de lance!ent de lKapplication#
"""
!aster4Ftk#%k?A
!5id&et F RonH:pplication?!aster4A
!aster4#title F VRon :pplicationV
!aster4#&eo!etry FV2..)..V
!aster4#!ainloop?A

D eecution de l"application
!ain?A
5 - #onclusion
Ce cours n"est pas une synth>se# 6"ob/ecti0 est /uste de proposer un support initial pour avoir une
vision de la pro&ra!!ation en Python@ sa si!plicit( et sa puissance# 6"i!portance de la
docu!entation eistante en 0ait un outil en tr>s accessible quelque soit son niveau de
pro&ra!!ation#
4 - 5nnexe 5 3 Scopes et ,amespace
6e 0onctionne!ent de python et plus particuli>re!ent les d(0initions de cha!ps d"application ou
de port( des variables@ !(thodes ou classes est essentielle pour le bon 0onctionne!ent des scripts#
6a docu!entation ori&inale sur ce su/et sur le site python#or& est B cette adresse 8
http8QQdocs#python#or&QtutorialQclasses#ht!l#
["ai reproduit ci-dessous le para&raphe concern(#
;et<s begin with some definitions.
$ namespace is a mapping from names to ob6ects. &ost namespaces are currently implemented as
Python dictionaries) but that<s normally not noticeable in any way (e+cept for performance)) and it
may change in the future. =+amples of namespaces are4 the set of built-in names (containing
functions such as abs()) and built-in e+ception names)> the global names in a module> and the
local names in a function in*ocation. ?n a sense the set of attributes of an ob6ect also form a
namespace. @he important thing to know about namespaces is that there is absolutely no relation
between names in different namespaces> for instance) two different modules may both define a
function maximize without confusion A users of the modules must prefi+ it with the module
name.
,y the way) ? use the word attribute for any name following a dot A for e+ample) in the e+pression
z.real) real is an attribute of the ob6ect z. !trictly speaking) references to names in modules
are attribute references4 in the e+pression modname.funcname) modname is a module ob6ect
and funcname is an attribute of it. ?n this case there happens to be a straightforward mapping
between the module<s attributes and the global names defined in the module4 they share the same
namespaceB C2D
$ttributes may be read-only or writable. ?n the latter case) assignment to attributes is possible.
&odule attributes are writable4 you can write modname.the_answer = 42. Eritable
attributes may also be deleted with the del statement. For e+ample) del
modname.the_answer will remo*e the attribute the_answer from the ob6ect named by
modname.
:amespaces are created at different moments and ha*e different lifetimes. @he namespace
containing the built-in names is created when the Python interpreter starts up) and is ne*er
deleted. @he global namespace for a module is created when the module definition is read in>
normally) module namespaces also last until the interpreter "uits. @he statements e+ecuted by the
top-le*el in*ocation of the interpreter) either read from a script file or interacti*ely) are considered
part of a module called __main__) so they ha*e their own global namespace. (@he built-in
names actually also li*e in a module> this is called __builtin__.)
@he local namespace for a function is created when the function is called) and deleted when the
function returns or raises an e+ception that is not handled within the function. ($ctually) forgetting
would be a better way to describe what actually happens.) .f course) recursi*e in*ocations each
ha*e their own local namespace.
Franck Delahaye - Observatoire de Paris
$'
$ scope is a te+tual region of a Python program where a namespace is directly accessible.
F5irectly accessibleG here means that an un"ualified reference to a name attempts to find the
name in the namespace.
$lthough scopes are determined statically) they are used dynamically. $t any time during
e+ecution) there are at least three nested scopes whose namespaces are directly accessible4
the innermost scope) which is searched first) contains the local names
the scopes of any enclosing functions) which are searched starting with the nearest
enclosing scope) contains non-local) but also non-global names
the ne+t-to-last scope contains the current module<s global names
the outermost scope (searched last) is the namespace containing built-in names
?f a name is declared global) then all references and assignments go directly to the middle scope
containing the module<s global names. .therwise) all *ariables found outside of the innermost
scope are read-only (an attempt to write to such a *ariable will simply create a new local *ariable
in the innermost scope) lea*ing the identically named outer *ariable unchanged).
Hsually) the local scope references the local names of the (te+tually) current function. .utside
functions) the local scope references the same namespace as the global scope4 the module<s
namespace. 'lass definitions place yet another namespace in the local scope.
?t is important to realiIe that scopes are determined te+tually4 the global scope of a function
defined in a module is that module<s namespace) no matter from where or by what alias the
function is called. .n the other hand) the actual search for names is done dynamically) at run time
A howe*er) the language definition is e*ol*ing towards static name resolution) at FcompileG time)
so don<t rely on dynamic name resolutionB (?n fact) local *ariables are already determined
statically.)
$ special "uirk of Python is that % if no global statement is in effect % assignments to names
always go into the innermost scope. $ssignments do not copy data A they 6ust bind names to
ob6ects. @he same is true for deletions4 the statement del x remo*es the binding of x from the
namespace referenced by the local scope. ?n fact) all operations that introduce new names use the
local scope4 in particular) import statements and function definitions bind the module or
function name in the local scope. (@he global statement can be used to indicate that particular
*ariables li*e in the global scope.)
Franck Delahaye - Observatoire de Paris
$$
6 - 5nnexe 7 3 Quelques notes sur la syntaxe de classe.
7.1 - 8aria&le dans les classes.
:ote on ?nstance of a *ariable and 'lass *ariable.
$.+ is a class *ariable. ,'s self.+ is a instance *ariable.
i#e# :"s is shared bet5een instances#
It 5ould be easier to de!onstrate the di00erence 5ith so!ethin& that can be !odi0ied like a list8
#!/usr/bin/env python
class A:
x = []
def add(self):
self.x.append()
class !:
def ""init""(self):
self.x = []
def add(self):
self.x.append()
x = A()
y = A()
x.add()
y.add()
print #A$s x:#%x.x
x = !()
y = !()
x.add()
y.add()
print #!$s x:#%x.x
Output
:"s 8 L1@ 1M
;"s 8 L1M
$.+ is a class *ariable) and will be shared across all instances of $) unless specifically o*erridden
within an instance. ,.+ is an instance *ariable) and each instance of , has its own *ersion of it.
I hope the 0ollo5in& Python ea!ple can clari0y8
&&& class 'oo():
... i = (
... def bar(self):
... print $'oo.i is$% 'oo.i
... print $self.i is$% self.i
...
&&& f = 'oo() # )reate an instance of the 'oo class
&&& f.bar()
'oo.i is (
self.i is (
&&& 'oo.i = * # )han+e the +lobal value of 'oo.i over all instances
&&& f.bar()
'oo.i is *
self.i is *
&&& f.i = ( # ,verride this instance$s definition of i
&&& f.bar()
'oo.i is *
self.i is (
Franck Delahaye - Observatoire de Paris
$)
7.2 - Sel*
[ust as a side note8 self is actually /ust a rando!ly chosen 5ord@ that everyone uses@ but you
could also use this@ foo@ or -yself or anythin& else you 5ant@ it"s /ust the 0irst para!eter o0
every non static !ethod 0or a class# %his !eans that the 5ord self is not a lan&ua&e construct
but /ust a na!e8
&&& class A:
... def ""init""(s):
... s.bla = .
...
&&&
&&& a = A()
&&& a.bla
.
8 - Note On the Underscore :
Di00erence bet5een H@ HH and HHHH in Python
12 Set '.1.
4hen learnin& Python !any people don"t really understand 5hy so !uch underlines in the
be&innin& o0 the !ethods@ so!eti!es even in the end like HHthisHHX I"ve already had to eplain it
so !any ti!es@ it"s ti!e to docu!ent it#
One underline in the be&innin&
Python doesn"t have real private !ethods@ so one underline in the be&innin& o0 a !ethod or
attribute !eans you shouldn"t access this !ethod@ because it"s not part o0 the :PI# It"s very
co!!on 5hen usin& properties8
class ;aseFor!?Str:nd=nicodeA8
###
de0 H&etHerrors?sel0A8
V-eturns an CrrorDict 0or the data provided 0or the 0or!V
i0 sel0#Herrors is 1one8
sel0#0ullHclean?A
return sel0#Herrors
errors F property?H&etHerrorsA
%his snippet 5as taken 0ro! d/an&o source code ?d/an&oQ0or!sQ0or!s#pyA# %his !eans errors is a
property@ and it"s part o0 the :PI@ but the !ethod this property calls@ H&etHerrors@ is VprivateV@ so
you shouldn"t access it#
%5o underlines in the be&innin&
Franck Delahaye - Observatoire de Paris
$*

%his one causes a lot o0 con0usion# It should not be used to !ark a !ethod as private@ the &oal here
is to avoid your !ethod to be overriden by a subclass# 6et"s see an ea!ple8
class :?ob/ectA8
de0 HH!ethod?sel0A8
print VI"! a !ethod in :V
de0 !ethod?sel0A8
sel0#HH!ethod?A
PPa F :?A
PPa#!ethod?A
%he output here is
g python ea!ple#py
I"! a !ethod in :
Fine@ as 5e epected# 1o5 let"s subclass : and custo!iTe HH!ethod
class ;?:A8
de0 HH!ethod?sel0A8
print VI"! a !ethod in ;V
b F ;?A
b#!ethod?A
and no5 the output is###
g python ea!ple#py
I"! a !ethod in :
as you can see@ :#!ethod?A didn"t call ;#HH!ethod?A as 5e could epecte# :ctually this is the
correct behavior 0or HH# So 5hen you create a !ethod startin& 5ith HH you"re sayin& that you don"t
5ant anybody to override it@ it 5ill be accessible /ust 0ro! inside the o5n class#
3o5 python does itN Si!ple@ it /ust rena!es the !ethod# %ake a look8
a F :?A
a#H:HH!ethod?A D never use thisXX pleaseX
g python ea!ple#py
I"! a !ethod in :
Franck Delahaye - Observatoire de Paris
$2

I0 you try to access a#HH!ethod?A it 5on"t 5ork either@ as I said@ HH!ethod is /ust accessible inside
the class itsel0#
%5o underlines in the be&innin& and in the end
4hen you see a !ethod like HHthisHH@ the rule is si!ple8 don"t call it# 4hyN ;ecause it !eans it"s a
!ethod python calls@ not you# %ake a look8
PPP na!e F Vi&orV
PPP na!e#HHlenHH?A
)
PPP len?na!eA
)
PPP nu!ber F 1.
PPP nu!ber#HHaddHH?'.A
$.
PPP nu!ber J '.
$.
%here is al5ays an operator or native 0unction that calls these !a&ic !ethods# %he idea here is to
&ive you the ability to override operators in your o5n classes# So!eti!es it"s /ust a hook python
calls in speci0ic situations# HHinitHH?A@ 0or ea!ple@ is called 5hen the ob/ect is created so you can
initialiTe it# HHne5HH?A is called to build the instance@ and so on###
3ere"s an ea!ple8
class CraTy1u!ber?ob/ectA8
de0 HHinitHH?sel0@ nA8
sel0#n F n
de0 HHaddHH?sel0@ otherA8
return sel0#n - other
de0 HHsubHH?sel0@ otherA8
return sel0#n J other
de0 HHstrHH?sel0A8
return str?sel0#nA
nu! F CraTy1u!ber?1.A
print nu! D 1.
print nu! J * D *
print nu! - '. D $.
Franck Delahaye - Observatoire de Paris
$+
:nother ea!ple8
class -oo!?ob/ectA8
de0 HHinitHH?sel0A8
sel0#people F LM
de0 add?sel0@ personA8
sel0#people#append?personA
de0 HHlenHH?sel0A8
return len?sel0#peopleA
roo! F -oo!?A
roo!#add?VI&orVA
print len?roo!A D 1
%he docu!entation covers all these special !ethods#
Conclusion
=se HoneHunderline to !ark you !ethods as not part o0 the :PI# =se HHt5oHunderlinesHH 5hen
you"re creatin& ob/ects to look like native python ob/ects or you 5an"t to custo!iTe behavior in
speci0ic situations# :nd don"t use HH/ustHtoHunderlines@ unless you really kno5 5hat you"re doin&X
:kno5led&e!ent 8 Rerci B Christian et 1icolas pour leur relecture attentive per!ettant de r(duire
s(rieuse!ent le no!bre de 0autes et d"(claircir certains points#
Franck Delahaye - Observatoire de Paris
$9

Вам также может понравиться

  • Cours Python
    Cours Python
    Документ14 страниц
    Cours Python
    Ismaila Ba
    Оценок пока нет
  • Cours Python
    Cours Python
    Документ14 страниц
    Cours Python
    Ismaila Ba
    Оценок пока нет
  • Analyse Numerique
    Analyse Numerique
    Документ184 страницы
    Analyse Numerique
    electroblida
    100% (4)
  • PV RP Réseau BT 2008
    PV RP Réseau BT 2008
    Документ1 страница
    PV RP Réseau BT 2008
    Ismaila Ba
    Оценок пока нет
  • Le Disjoncteur
    Le Disjoncteur
    Документ9 страниц
    Le Disjoncteur
    Ismaila Ba
    Оценок пока нет
  • Chapitre 1.coursFROID
    Chapitre 1.coursFROID
    Документ12 страниц
    Chapitre 1.coursFROID
    Ismaila Ba
    100% (1)
  • Methode Calcul FR
    Methode Calcul FR
    Документ4 страницы
    Methode Calcul FR
    Ismaila Ba
    Оценок пока нет
  • Le Reglage D'un Pressostat
    Le Reglage D'un Pressostat
    Документ2 страницы
    Le Reglage D'un Pressostat
    Ismaila Ba
    Оценок пока нет
  • Lettre de Motivation PDF
    Lettre de Motivation PDF
    Документ1 страница
    Lettre de Motivation PDF
    Ismaila Ba
    100% (1)
  • Fioul Lourd
    Fioul Lourd
    Документ12 страниц
    Fioul Lourd
    Ismaila Ba
    Оценок пока нет
  • TP3 Jpa 2018
    TP3 Jpa 2018
    Документ12 страниц
    TP3 Jpa 2018
    Salomon Lomos
    Оценок пока нет
  • Cours MCSI PDF
    Cours MCSI PDF
    Документ152 страницы
    Cours MCSI PDF
    p
    Оценок пока нет
  • ModelisationUML Chap3-Diag - De.classes
    ModelisationUML Chap3-Diag - De.classes
    Документ11 страниц
    ModelisationUML Chap3-Diag - De.classes
    Zi Ed
    Оценок пока нет
  • Corrige Fiche tp1
    Corrige Fiche tp1
    Документ4 страницы
    Corrige Fiche tp1
    Mano La
    Оценок пока нет
  • TD4 Enonce
    TD4 Enonce
    Документ4 страницы
    TD4 Enonce
    med
    Оценок пока нет
  • Cours Java Beans
    Cours Java Beans
    Документ157 страниц
    Cours Java Beans
    tolmous
    Оценок пока нет
  • Offre de Formation BTS-Vol 7
    Offre de Formation BTS-Vol 7
    Документ149 страниц
    Offre de Formation BTS-Vol 7
    Fabrice leonel Toukam Poualeu
    Оценок пока нет
  • Cours UML Diarra
    Cours UML Diarra
    Документ63 страницы
    Cours UML Diarra
    Gabriel DADJA
    Оценок пока нет
  • Support 1 Delphi
    Support 1 Delphi
    Документ65 страниц
    Support 1 Delphi
    mohamedlg
    0% (1)
  • Correc TD 5
    Correc TD 5
    Документ2 страницы
    Correc TD 5
    med
    Оценок пока нет
  • Cours JAVA S1 - PPT
    Cours JAVA S1 - PPT
    Документ242 страницы
    Cours JAVA S1 - PPT
    Asma Ben Algia
    100% (3)
  • td4 5
    td4 5
    Документ7 страниц
    td4 5
    Nabil Bikri
    Оценок пока нет
  • Anas 065@
    Anas 065@
    Документ90 страниц
    Anas 065@
    simo2192@hotmail.com
    Оценок пока нет
  • Les Bases de Données Et L 'Objet: Didier DONSEZ
    Les Bases de Données Et L 'Objet: Didier DONSEZ
    Документ10 страниц
    Les Bases de Données Et L 'Objet: Didier DONSEZ
    Essadik Dev
    Оценок пока нет
  • Cnam - La Méthode Uml
    Cnam - La Méthode Uml
    Документ69 страниц
    Cnam - La Méthode Uml
    CHICOALMOST
    Оценок пока нет
  • Design Pattern1
    Design Pattern1
    Документ11 страниц
    Design Pattern1
    Nicolas Vdh
    Оценок пока нет
  • La Programmation
    La Programmation
    Документ18 страниц
    La Programmation
    El Amrani Laila
    Оценок пока нет
  • Interfaces
    Interfaces
    Документ19 страниц
    Interfaces
    eya boulaaba
    Оценок пока нет
  • TP2 Heritage POO
    TP2 Heritage POO
    Документ4 страницы
    TP2 Heritage POO
    anas
    Оценок пока нет
  • Java RMI
    Java RMI
    Документ29 страниц
    Java RMI
    ngombe emmanuel
    Оценок пока нет
  • TP2 Série
    TP2 Série
    Документ3 страницы
    TP2 Série
    Abdeslam MOUKHLISS
    Оценок пока нет
  • Un Trés Bon Cours Surjava - Objet Il Faire Ces Exe+solu PDF
    Un Trés Bon Cours Surjava - Objet Il Faire Ces Exe+solu PDF
    Документ103 страницы
    Un Trés Bon Cours Surjava - Objet Il Faire Ces Exe+solu PDF
    Goumidi Mohamed
    100% (1)
  • POOChapi 8
    POOChapi 8
    Документ54 страницы
    POOChapi 8
    tayeb1920
    Оценок пока нет
  • Chapitre - 4 - Génie Logiciel Et UML
    Chapitre - 4 - Génie Logiciel Et UML
    Документ62 страницы
    Chapitre - 4 - Génie Logiciel Et UML
    BOUA DIARRA
    Оценок пока нет
  • JDK, Jre, JVM
    JDK, Jre, JVM
    Документ7 страниц
    JDK, Jre, JVM
    fahd
    Оценок пока нет
  • Cours Heritage
    Cours Heritage
    Документ37 страниц
    Cours Heritage
    Cha Maà
    Оценок пока нет
  • Méthodes Et Classes Abstraites
    Méthodes Et Classes Abstraites
    Документ5 страниц
    Méthodes Et Classes Abstraites
    Mohamed Messaoudi
    Оценок пока нет
  • TP4 Heritage Java
    TP4 Heritage Java
    Документ5 страниц
    TP4 Heritage Java
    Eya Salem
    Оценок пока нет
  • ch2 Intro UML
    ch2 Intro UML
    Документ4 страницы
    ch2 Intro UML
    houssem bouzaabia
    Оценок пока нет
  • Java Rapport
    Java Rapport
    Документ20 страниц
    Java Rapport
    denobo4340
    Оценок пока нет