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 :

[Débutant] documentation API (par exemple Socket)


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Débutant] documentation API (par exemple Socket)
    Bonjour,

    Une question de novice au sujet de python ...

    Cela concerne l'API socket mais mes questions sont un peu plus
    générales, je crois.

    1)
    J'ai mis quelque temps à comprendre que le module à importer
    portait le même nom qu'une des classes du module: socket.
    Je trouve cela pour le moins curieux et confus ... est-ce quelque
    chose de commun en python ? et y-a-t-il un intérêt à faire ceci ?

    2)
    existe-t--il un truc similaire à la javadoc ... parce que la
    doc là : http://docs.python.org/3.1/library/socket.html
    est pas mal ... mais ça ne me semble pas remplacer
    une javadoc.

    3) quand je lis que

    socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    "Create a new socket using the given address family, socket type and protocol number."...

    cela signifie-t-il que c'est le constructeur de socket qui est appelé ? ou une fonction du module socket ... c'est pas clair pour moi
    d'autant plus que je ne trouve pas la liste des constructeurs de socket (comme me le donnerait un truc style javadoc ....)

    Merci par avance pour vos réponses !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Bonsoir,

    Citation Envoyé par jean-fr Voir le message
    J'ai mis quelque temps à comprendre que le module à importer portait le même nom qu'une des classes du module: socket.
    Je trouve cela pour le moins curieux et confus ... est-ce quelque
    chose de commun en python ? et y-a-t-il un intérêt à faire ceci ?
    Python et son utilisation intensive des espaces de nommage, au début c'est surprenant mais avec un peu de pratique vous verrez que c'est aussi un de ses atouts.

    3) quand je lis que
    socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    "Create a new socket using the given address family, socket type and protocol number."...
    cela signifie-t-il que c'est le constructeur de socket qui est appelé ? ou une fonction du module socket ... c'est pas clair pour moi
    Les modules Python peuvent contenir des variables, des fonctions ou des classes. Dans le module socket,
    • has_ipv6 est une variable
    • create_connection est une fonction (qui retourne un socket)
    • socket est une classe

    Compliqué? Une façon de voir les choses est d'imaginer qu'un module est un Singleton.
    Comment savoir que socket.socket est une classe? Parce que l'object socket et ses méthodes sont documentées... (relisez la doc).
    => socket.socket est donc à priori un constructeur - il vous retourne une nouvelle instance de...

    d'autant plus que je ne trouve pas la liste des constructeurs de socket (comme me le donnerait un truc style javadoc ....)
    La documentation Python est construite a partir du code comme Javadoc.
    Par contre, vous n'y avez pas encore trouvé vos repères: courage, patience,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    En Python 2.5 c'est en fait un alias de _socketobject qui est le vrai nom de la classe, semble-t-il:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import socket as s
    >>> s.socket
    <class 'socket._socketobject'>
    >>> s.socket is s._socketobject
    True
    En Python 3.1 par contre, la classe s'appelle réellement socket et _socketobject a disparu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import socket as s
    >>> s.socket
    <class 'socket.socket'>
    C'est un peu inhabituel étant donné que, par convention, le nom d'une classe est généralement capitalisé en Python. socket aurait aussi bien pu être une fonction qui retourne un nouvel object de type Socket...

    En réalité peu importe: que ce soit une fonction ou un constructeur, la syntaxe pour l'utiliser est la même. La différence n'est importante que si vous voulez créer une nouvelle classe qui hérite de socket, mais je doute que ce soit le type d'utilisation le plus fréquent.

    J'ajouterais qu'il n'y a toujours qu'un seul constructeur en Python, qui s'appelle __init__. Cela n'a donc pas de sens de parler d'une liste de constructeur. Il est par contre aisé de fournir plusieurs fonctions ou "factory methods" qui initialisent un object de différentes façons.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Honteusement ... après plus d'1 mois, je remercie
    les contributeurs de ce fil !
    J'avais laissé tomber Python ces derniers temps et je m'y remets ...

    Merci à vous.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Un petit up sur ce fil pour une nouvelle question relative aux sockets.

    dans le module socket, il y a deux fonctions htonl et
    htons pour transcoder les long et les short avant
    de les envoyer sur le réseau.

    Comment puis-je savoir lequel des deux utiliser pour mon numéro
    de port lorsque je fais mon bind ?

    Etant donné que python 3 ne gère que des int et que les deux fonctions
    sont pour des short et des long ... je suis un peu perdu ...
    (comme ce n'est pas mon code qui fera le ntoh, je ne peux
    pas décider arbitrairement de la fonction à utiliser ...)

    merci pour votre aide

  6. #6
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 143
    Points
    143
    Par défaut
    Si je ne dis pas de bétise, tu n'as pas besoin de convertir des entiers si tu veux t'en servir comme argument à la méthode bind. C'est cette méthode qui se charge de convertir au bon type.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Biribibi Voir le message
    Si je ne dis pas de bétise, tu n'as pas besoin de convertir des entiers si tu veux t'en servir comme argument à la méthode bind. C'est cette méthode qui se charge de convertir au bon type.

    Hum ... tu connais une doc qui parle de ça ?

    cela dit, ça ne serait pas idiot ... vu que l'interprétation
    du numéro de port n'est pas du ressort du programmeur ...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Les différents aggregats (host, port) correspondant à des sockaddr sont des tuples que la bibliothèque C Python convertis avec des htonX ntohX dans socketmodule.c

    cela dit, ça ne serait pas idiot ... vu que l'interprétation
    du numéro de port n'est pas du ressort du programmeur ...
    Heu??
    Toute cette histoire de htons est pour que lorsque vous dites "port=1234" dans votre programme... C'est effectivement le port 1234 au sens TCP/IP.
    Ce qui ... permet à TCP/IP d'interpréter "correctement" ce que le programmeur veut.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [WD17] [Débutant] Documentation avec exemples pour commencer
    Par devlopassion dans le forum WinDev
    Réponses: 8
    Dernier message: 05/08/2014, 15h30
  2. Réponses: 4
    Dernier message: 14/07/2009, 00h59
  3. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  4. [api windows]envoyer une BMP par une socket
    Par hansaplast dans le forum Windows
    Réponses: 12
    Dernier message: 31/01/2006, 13h43
  5. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07

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