OVH Cloud OVH Cloud

regles de nommage

2 réponses
Avatar
JBB
Bonjour,

Voici mon soucis:
J'ai pour habitude de faire une classe par fichier( habitude issu du Java).
Imaginons que je veuille faire une classe avion.
J'ai donc une classe avion dans un fichier avion.py

ex: avion.py
class avion :
pass

dans mon programme je peux taper un truc du genre:
import avion
mon_avion = avion.avion()
et même
avion = avion.avion() !!!
et ça marche ( au moins un certain temps)

ça fait beaucoup d'avion et c'est pas très lisible.

comme j'ai fait du Java ma classe s'appelle en réalité Avion ce qui
limite un peu la confusion.
mon_avion = avion.Avion()

si j'utilise
from avion import *
je n'ai plus de problème
je peut faire
mon_avion = avion.Avion()
et même
avion = Avion()
par contre il parait que ce n'est pas bien (!?)

sinon je peux aussi mettre un majuscule sur le fichier pour faire un
import Avion

autre question: est ce que je peux empêcher de réaffecter une variable:
dans ce cas
avion = avion.avion()
qui écrase le module, enverrais une exception.

Merci pour vous idées.

2 réponses

Avatar
bruno.desthuilliers
On 26 fév, 12:45, JBB wrote:
Bonjour,

Voici mon soucis:
J'ai pour habitude de faire une classe par fichier( habitude issu du Java ).


Mais qu'il n'est pas forcément bon de transposer à Python. D'une part,
parce que Python ne force pas à tout mettre dans des classes, d'autre
part parce que les classes Python tendent à être assez courtes, et
enfin parce qu'en Python, un fichier source == 1 module. Bref,
n'hésite pas à mettre plusieurs classes (et fonctions, constantes et
autres) dans un même module.

Imaginons que je veuille faire une classe avion.
J'ai donc une classe avion dans un fichier avion.py

ex: avion.py
class avion :


class Avion(object):

pass

dans mon programme je peux taper un truc du genre:
import avion
mon_avion = avion.avion()
et même
avion = avion.avion() !!!
et ça marche ( au moins un certain temps)


ce dernier va écraser le binding précédent du nom 'avion' sur le
module avion.py. Tu ne pourra donc plus accéder au module.

ça fait beaucoup d'avion et c'est pas très lisible.


Non.

comme j'ai fait du Java ma classe s'appelle en réalité Avion ce qui
limite un peu la confusion.
mon_avion = avion.Avion()

si j'utilise
from avion import *
je n'ai plus de problème


Tu va très vite en avoir d'autres.

je peut faire
mon_avion = avion.Avion()
et même
avion = Avion()
par contre il parait que ce n'est pas bien (!?)


from <package> import * est très pratique dans une session
interactive, mais à éviter dans du code sérieux - ne serait-ce que
pour la lisibilité. Imagine :

# badcode.py
from pack1 import *
from pack2 import *
from pack3 import *
from pack4 import *

truc = UnTruc()
fait_ci(truc)
#

Où sont définis UnTruc et fait_ci ? > Merci pour vous idées.



sinon je peux aussi mettre un majuscule sur le fichier pour faire un
import Avion


Sinon, tu peux aussi faire tout simplement:

from avion import Avion

avion = Avion()

autre question: est ce que je peux empêcher de réaffecter une variabl e:
dans ce cas
avion = avion.avion()
qui écrase le module, enverrais une exception.


Non. Si tu veux écraser un nom de module, c'est ton affaire - après
tout, tu peux avoir de très bonnes raisons pour ça.

Apprendre un langage, ce n'est pas seulement apprendre la syntaxe -
c'est surtout et avant tout apprendre les idiomes et la 'philosopie'
du langage. De ce point de vue, Java et Python sont *très* différents.
Essayer d'écrire du Java en Python ne peut mener qu'à un bien inutile
sentiment de frustration. Si ce n'est pas déjà fait, je te recommande
cette lecture:
http://dirtsimple.org/2004/12/python-is-not-java.html

Mes deux centimes

Avatar
William Dode
On 26-02-2007, JBB wrote:
Bonjour,

Voici mon soucis:
J'ai pour habitude de faire une classe par fichier( habitude issu du Java).
Imaginons que je veuille faire une classe avion.
J'ai donc une classe avion dans un fichier avion.py

ex: avion.py
class avion :
pass


Une idée

module/fichier aeroport.py

dedans

class Avion:...
class Pilote:...

ainsi tu pourras faire

from aeroport import Avion, Pilote

puis
mon_avion = Avion()
mon_pilote = Pilote()

--
William Dodé - http://flibuste.net
Développeur informatique indépendant