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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    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 Expert

    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    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 éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    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 Expert

    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
    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