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 :

declarer une variable avec un bon type


Sujet :

Python

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut declarer une variable avec un bon type
    Bonjour,
    En python, on ne declare pas explicitement une variable, il suffit de l'initialiser pour qu'elle prenne le bon type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ch=""   # str
    val=5   # int
    l=[]   # list
    Mais pour des types complexes, ça se complique: j'ai un objet de type suivant : <class 'shapely.geometry.polygon.Polygon'> et je voudrais initialiser une variable pour qu'elle soit de type Polygon (cela correspondrait à un polygone vide en l'occurrence). Y a t'il une manière générique de faire cela pour n'importe quelle classe ?
    Merci

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Je ne comprends pas bien le problème…

    En python, une variable a un type dynamique, c’est-à-dire qu’elle prend le type de l’objet qu’on lui affecte.

    Donc, pour que ta variable soit de type Polygon, il faut lui assigner un objet de type Polygon

    … Pour peu que la classe Polygon supporte une initialisation sans paramètres –*sinon, il faut lui en fournir*!

    Note que typiquement, l’initialisation d’un objet python se fait en deux temps*:
    * La fonction de classe __new__ reçoit en paramètre l’objet classe et retourne une instance (normalement, de ce même objet classe).
    * La fonction __init__ reçoit en paramètre l’instance retournée par __new__, et est chargée de l’initialiser.

    Ce qui signifie que, si par extraordinaire tu veux une instance «*nue*», non-initialisée, tu peux faire*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v = Polygon.__new__(Polygon)
    … (enfin, en théorie… dans la pratique, c’est rarement utile et souvent «*dangereux*», notament parce qu’__init__ définit très souvent des variables d’instances, qui seraient donc inexistantes dans ce cas-là).

    PS*: Les trucs genre i = 5 ne sont que du sucre syntaxique pour éviter le plus verbeux i = int(5) –*au passage, int() sans paramètre (qui correspond mieux au [], par exemple), crée un entier par défaut, de valeur zéro.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par awalter1 Voir le message
    Y a t'il une manière générique de faire cela pour n'importe quelle classe ?
    Yes, mais on va faire cela en deux temps.

    Nous pouvons toujours définir une instance "particulière" de Polygon rangée par exemple dans "Polygon.NULL" ou "Polygon.DEFAULT".
    note: les équivalents de 0, '', 0.0 pour les objets int, str, float.

    L'affectation: a = Polygon.NULL permettra d'avoir une "chose" de type Polygon.

    Mais il se passera quoi lorsqu'on appelle une des méthodes de ce Polygon?
    Ce qui conduit à dériver Polygon en "Null Object" pour "spécialiser" ses méthodes.

    Voilà pour l'idée. Lire un peu ce qui se raconte autour du Null Object Pattern

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

  4. #4
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    En fait, je ne savais pas comment créer un polygone nul pour réaliser des unions de plusieurs polygones:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    all=???     # initialiser all
    for i=0;i<nb_polygons;i++:
       all = all.union(polygon[i])
    J'ai essayé Polygone.NULL mais ce n'est pas accepté, par contre Polygon.__new__(Polygon) semble bien créer un objet null:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>>from shapely.geometry import Polygon
    >>>all=Polygon.__new__(Polygon)
    >>>print all.is_empty
    True
    Merci, c'est résolu

  5. #5
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Arg!

    Et
    … c’est pas plus simple (et plus mieux, aussi)*?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/10/2011, 10h28
  2. [PowerShell] Comment retrouver le type d'une variable avec Where-Object
    Par badack dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 19/07/2010, 16h49
  3. declarer une ArrayList avec un type precis
    Par solawe dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 30/12/2006, 20h28
  4. comment declarer une variable de type date ?
    Par MAJIK_ENIS dans le forum JDBC
    Réponses: 1
    Dernier message: 26/05/2006, 00h02
  5. Réponses: 2
    Dernier message: 06/12/2005, 09h41

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