IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Quelques question sur Python


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut Quelques question sur Python
    Bonjour

    Dans le cadre d'un rapport ou je dois analyser Python et le comparer je me pose quelques question dont je ne trouve malheureusement pas les réponses :/ .

    On dit que Python à un typage fort. Qu'est ce que cela signifie vraiment? Car avec le typage dynamique une variable qui contient un "int" peut contenir un long...

    Il y'a t-il en python, comme en java, des classe abstraites ou des interfaces qui ne définissent que des méthodes devant être obligatoirement implémentées par les classe qui héritent. (Si oui il y a t-il une implémentation des listes sur ce modèle?)

    Il y'a t-il des sortes de header qui comme en C permettent de définir des fonctions secondaire après des fonctions principales?

    Merci d'avance de vos réponses???

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Pour la deuxième question j'ai trouvé une réponse je la poste ici pour les futures recherches:

    Interfaces/implémentations

    Dans un soucis de simplicité python n'implémente pas explicitement, contrairement à Java, la mise en oeuvres de "classes abstraites" ou "d'interfaces".

    Il est possible de réaliser implicitement des classes abstraites, des interfaces en créant des méthodes déclenchant, si la méthode est appelée, une exception.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    >>> class vehicule:
    ...     	def __init__(self, position):
    ...             self.position=position
    ...    	def coordonnes(self):				# création d'une méthode virtuelle 
    ...             raise NotImplementedError		# qui génère une exception
     
    >>> a= vehicule(10)					# création d'un objet vehicule
     
    >>> a.coordonnes()					#appel d'une méthode non définie
     
    Traceback (most recent call last):			# une exception est générée
      File "<stdin>", line 1, in ?
      File "<stdin>", line 5, in coordonnes
    NotImplementedError
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> class voiture(vehicule):			#création d'une classe voiture qui hérite de 
    						#véhicule
    ...	def __init__(self, position):		#constructeur
    ...		self.position=position 
    ...	def coordonnes(self):			#surcharge de la méthode coordonnes
    ...		return self.position
     
    >>> a=voiture(10)				
    >>> a.coordonnes()				#la méthode marche
    10
    Cependant on n'a généralement pas recours aux classes abstraites en python celui-ci gérant le concept de « duck typing » dont l'idée est que « If it walks like a duck and quacks like a duck, it must be a duck » (« si ça marche comme un canard et si ça cancane comme un canard, alors ce doit être un canard »).

    Plustôt que de se focaliser sur le type d'un objet il faut avant tout s'assurer qu'on peut lui appliquer les traitements souhaités.

    Par exemple:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Voiture:
    	def __init__(self, position):
    		self.position=position
    	def coordonnes(self):
    		return self.position
     
    class Avion:
    	def __init__(self, position):
    		self.position=position
    	def coordonnes(self):
    		return self.position
     
     
    for vehicule in [Voiture(10), Avion(5)]:
    	print vehicule.coordonnes()
     
    10
    5

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Anonymouse
    On dit que Python à un typage fort. Qu'est ce que cela signifie vraiment? Car avec le typage dynamique une variable qui contient un "int" peut contenir un long...
    Il n'est pas possible de convertir un entier en float par exemple (un entier long et un entier seront la même chose dans Python 3.0)

    Le duck Typing, c'est l'équivalent des templates en C++, sans le sucre syntaxique. L'héritage est toujours utile si on garde le paradigme héritage public = IS-A.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par Miles
    Il n'est pas possible de convertir un entier en float par exemple (un entier long et un entier seront la même chose dans Python 3.0)
    Il est possible de convertir un entier en float :Et la dernière version de Python, c'est la 2.5 Mais oui, vivement la 3.0 !

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Implicitement, j'entend.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 102
    Points
    102
    Par défaut
    Pour ce qui est du typage fort, c'est une notion que je préfère ne pas aborder : tout le monde interprète ces notions de typage fort / faible comme ça l'arrange, il n'y a pas de définition précise, bref, c'est le bazar !

    On retiendra que Python est un langage à typage dynamique : les variables ne sont pas déclarées, et elles ne sont pas typées (c'est leur contenu qui l'est).

    On peut ajouter, en ce qui concerne la POO, que les propriétés et méthodes sont publiques, et qu'en cours d'exécution, on peut supprimer ou ajouter des propriétés à un objet (aussi bien depuis lui-même que depuis un autre objet, ou depuis une procédure). Pour reprendre le canard, on peut lui ajouter une longueur de griffes (même si un canard n'en a pas), et on peut supprimer son âge (ce qui posera un problème quand on voudra le relever).

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Vladislav IV
    Pour ce qui est du typage fort, c'est une notion que je préfère ne pas aborder : tout le monde interprète ces notions de typage fort / faible comme ça l'arrange, il n'y a pas de définition précise, bref, c'est le bazar !

    On retiendra que Python est un langage à typage dynamique : les variables ne sont pas déclarées, et elles ne sont pas typées (c'est leur contenu qui l'est).
    Citation Envoyé par Miles
    Il n'est pas possible de convertir un entier en float par exemple (un entier long et un entier seront la même chose dans Python 3.0)
    Ok c'est ce qua j'avais compris avec: http://fr.wikipedia.org/wiki/Typage_fort
    Je pense que je vais l'aborder brièvement sans trop insister dessus en disant que les définitions du langage fortement typé sont assez nombreuses.

    Citation Envoyé par Miles
    Le duck Typing, c'est l'équivalent des templates en C++, sans le sucre syntaxique. L'héritage est toujours utile si on garde le paradigme héritage public = IS-A.
    Je ne fais pas de C++ mais seulement du C et du java (et pas à un haut niveau) mais je pense avoir bien cerné le concept qui à l'air intéressant.

    Citation Envoyé par Vladislav IV
    On peut ajouter, en ce qui concerne la POO, que les propriétés et méthodes sont publiques, et qu'en cours d'exécution, on peut supprimer ou ajouter des propriétés à un objet (aussi bien depuis lui-même que depuis un autre objet, ou depuis une procédure). Pour reprendre le canard, on peut lui ajouter une longueur de griffes (même si un canard n'en a pas), et on peut supprimer son âge (ce qui posera un problème quand on voudra le relever).
    C'est une des choses qui m'a étonné car si le programmeur n' est pas rigoureux ca peut poser des problèmes.
    J'ai l'impression que Python autorise beaucoup de choses même si elle ne sont pas forcément très recommandées après c'est au programmeur de s'adapter

    Pour l'application que l'on doit développer on avait d'abord pensé à un jeu pour une école primaire et notre professeur ce système nous à brièvement expliqué le concept d'Object Request Broker et peut être que nous allons développer une application sur plusieurs processus.

    Savez vous si la chose est faisable en Python?

    merci de toute vos réponses :d

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tout est faisable en Python

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Miles
    Tout est faisable en Python
    C'est ce que j'ai dit à mon professeur il m'a répondu que tout était faisable mais que selon les langages cela prendrait plus ou moins de temps.

    Il fallait mieux choisir un langage qui nous simplifierai la tache.

    De toute façon notre programme doit être fait en Python alors il le sera.

  10. #10
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Python autorise beaucoup de choses même si elle ne sont pas forcément très recommandées après c'est au programmeur de s'adapter
    Pars du principe qu'il faut essayer de faire, quitte à essuyer un refus (exception) et à le gerer plutôt que de demander la permission à chaque fois.
    Et puis beaucoup de langage autorise des choses totalement abject (melanger html/php, transtyper automatiquement, ....).

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pacificator
    Pars du principe qu'il faut essayer de faire, quitte à essuyer un refus (exception) et à le gerer plutôt que de demander la permission à chaque fois.
    Et puis beaucoup de langage autorise des choses totalement abject (melanger html/php, transtyper automatiquement, ....).
    Certes ! Néanmoins, c'est vrai que c'est assez déroutant... Malgré ma courte expérience de POO, on prend rapidement l'habitude d'utiliser des données privées et ça fait "tout drôle" de pouvoir accéder à tous les membres de ses classes en python...

    D'ailleurs j'ai entendu parler du "mangling" de Python, mais je me suis pas encore vraiment penché dessus, il semblerait que ça permettre de mettre en place une sorte de contrôle d'accès aux données membres ?

    Bon courage pour votre projet !!
    Chou !

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    En préfixant avec __, on peut ajouter des pseudo-variables privées, pas vraiment privées, mais un peu plus difficile d'accès.
    Effectivement, il est possible d'utiliser les propriétés pour les accès, mais derrière, il y a vraissemblablement une variable en __x.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Miles
    En préfixant avec __, on peut ajouter des pseudo-variables privées, pas vraiment privées, mais un peu plus difficile d'accès.
    Effectivement, il est possible d'utiliser les propriétés pour les accès, mais derrière, il y a vraissemblablement une variable en __x.
    Hum ok Miles, merci de m'avoir éclairé, c'est donc bien à peu près ce dont je me souvenais

    A ce propos, pourquoi les concepteurs de Python ont-ils effectué le choix de ne pas implémenter une encapsulation "stricte" pour Python ? Soucis de simplifier le travail des développeurs, de réduire le volume de code à produire (je pense notamment aux accesseurs), ou d'autres raisons ???

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Par simplicité sans doute, effectivement.
    Et ce qui est vraiment bien, c'est que si on a besoin d'accesseur d'un coup c'est facile à mettre en place, sans changer le code, contrairement au C++ !

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par PierreAd
    Malgré ma courte expérience de POO, on prend rapidement l'habitude d'utiliser des données privées et ça fait "tout drôle" de pouvoir accéder à tous les membres de ses classes en python...
    Ce n'est pas parce qu'on peut le faire, qu'on doit le faire Si on veut être strict sur la POO, on définit des assesseurs, rien ne l'empêche. Mais c'est vrai que ça craint si on publie nos classes, et que d'autres développeurs les utilisent n'importe comment (après ils vont dire que c'est de notre faute )

    Pour la précision de Miles sur le préfixe en '__', c'est vrai que c'est un ersatz de privacité. Si on a une propriété '__x' d'une classe 'A', elle est accessible depuis l'extérieur sous '_A__x'. C'est malin, comme ça, mais dès qu'on a de l'héritage, ça devient vite tordu.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Bonjour
    Merci de toutes vos réponses

    Une des applications qui nous à été proposée de réaliser en Python est la conceptualisation de bijoux, diamants pour une bijouterie.
    Le but serait de définir des formes de bases que la personne pourrait modifier pour les faire ressembler à ses propres créations.

    Vu que blender utilise la langage de scripting python il y aurait-il moyen de réaliser se projet?

    Je pense notamment à la réalisation d'un programme générant des scripts python pour blender en fonction de coordonnées rentrées dans notre logiciel à partir de formes que nous aurons pré réaliser.

    Le mieux serait que les modifications faites soient immédiatement visible sur blender sans que la personne soit obliger de charger le script manuellement.

    Qu'en pensez vous?

Discussions similaires

  1. Quelques questions sur PYTHON
    Par Jiyuu dans le forum Général Python
    Réponses: 8
    Dernier message: 01/02/2008, 11h41
  2. Réponses: 19
    Dernier message: 21/10/2005, 19h24
  3. Quelques questions sur la mémoire
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 17/11/2004, 14h38
  4. Quelques question sur Win 32 Appli
    Par lvdnono dans le forum Windows
    Réponses: 5
    Dernier message: 15/06/2004, 12h37
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo