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 :

Utilisation de class avec une chaine de caractère


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Utilisation de class avec une chaine de caractère
    Bonjour à tous

    J'ai besoin de votre aide sur un détail de programmation python auquel je n'arrive vraiment pas à faire face ...

    j'ai une fonction qui me créée une liste l=[a, b, c]
    j'ai aussi une class main
    le code ressemble à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    l=[a, b, c]
    g=[A, B, C]
    dict={}
     
    class main:
          def __init__(self):
                 self.a=
                 self.b=2
                 self.c=3
     
    res=main()
     
    for i in range (0, len(l), 1):
    et la je voudrais avoir {'1' : 'A' ; '2' : 'B' ; '3' : 'C'} mais en se servant de la liste l pour pouvoir l'utiliser pour n'importe quelle liste

    mais je ne peux pas faire dans la boucle for: dict[main.l[i]]=[g[i]] car il ne comprend pas le l[i], il ne considère pas ca comme 'a' et j'ai essayer en faisant main.globals()['l[i]'] mais de même il ne comprend pas .... si quelqu'un à une solution pour utiliser une variable comme fonction je suis preneur, mais sachant que la methode globals fonctionne que si elle se trouve au debut de l'expression ...
    Merci d'avnce

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Points : 138
    Points
    138
    Par défaut
    J'ai pas tout compris je t’avouerais mais déjà petite correction dans l'__init__ de ta class :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class main:
          def __init__(self):
                 self.a=1

    Ensuite, de ce que je comprend, tu veux utiliser la variable l comme attribut de ta classe main, or l n'est pas déclaré dans ta classe mais avant, du coup tu ne peux pas faire main.l, si tu veux le faire tu doit déclarer un attribut self.l dans ton __init__.

    Pour ce qui est de ta boucle, tu te compliques, il existe une fonction zip() qui va te permettre de faire une itération sur deux iterables à la fois et se stopper à la fin de l'iterable le plus court si ils ne sont pas de la même taille, ce qui donnerait pour toi un truc du genre :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    l = ['A', 'B', 'C']
    for le, ch in zip(l, range(1, len(l)+1, 1)):
        dic[str(ch)] = le
    {'1': 'A', '3': 'C', '2': 'B'}

    Si jamais tu as d'autres précisions pour que je puisse mieux comprendre n'hésite pas à les ajouter.

    Et en dernier point, je te conseillerais de revoir un peu les bases de la POO en python, je pense que tu as quelque lacune dans ce domaine.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai un code CA_codes.py:
    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
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    class JSON_keys:
    	def __init__(self):
    		self.CONDUCTIVITY='CO'
    		self.TURBIDITY='TU'
    		self.PH='PH'
    		self.ORP='ORP'
    		self.REDOX='RH'
    		self.FLOW='FL'
    		self.VOLUME='VO'
    		self.OXYGEN='OX'
    		self.HEIGHT='HE'
    		self.SALINITY='SA'
    		self.TEMPERATURE='TE'
    et le code Utraflux_values.py:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import Ultraflux_addresses
    import CA_codes
    import minimalmodbus
    import extraction_xml
     
    Modbus_addresses=Ultraflux_addresses.Ultraflux_table()
    JSON_CA=CA_codes.JSON_keys()
     
    #extraction des parametres modbus du fichier de config pour le dispositif en question
    baudrate=extraction_xml.text('/MODBUS/ULTRAFLUX/MODBUS_BAUDRATE')
    parity_value=extraction_xml.text('/MODBUS/ULTRAFLUX/MODBUS_PARITY_VALUE')
    stop_bits_number=extraction_xml.text('/MODBUS/ULTRAFLUX/MODBUS_STOPBITS_NUMBER')
    slave_address=extraction_xml.text('/MODBUS/ULTRAFLUX/SLAVE_ADDRESS')
     
    #extraction des parametres a recuperer ou non
    parameters_to_send={}
    list_parameters=extraction_xml.elements_fils('/DATA')
    for i in range (0, len(list_parameters), 1):
    	a=list_parameters[i]
    	parameters_to_send[JSON_CA.a]=extraction_xml.text('/DATA/'+list_parameters[i])
    print(parameters_to_send)
     
    #extraction du tty
    right_tty=extraction_xml.text('/MODBUS/ULTRAFLUX/USB_SERIAL_PORT')

    Et c'est au niveau du parameters_to_send[JSON_CA.a]=extraction_xml.text('/DATA/'+list_parameters[i]), python ne comprend pas JSON_CA.a car il veut voir a commme un attribut directement et non regarder ce que contient a pour se servir de la chaine de caractère dans a comme attribut.
    En tout cas merci de ta réponse et j'espère que tu pourras mieux comprendre avec les vrais codes.

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

    Citation Envoyé par aqwzsx999 Voir le message
    Et c'est au niveau du parameters_to_send[JSON_CA.a]=extraction_xml.text('/DATA/'+list_parameters[i]), python ne comprend pas JSON_CA.a car il veut voir a commme un attribut directement et non regarder ce que contient a pour se servir de la chaine de caractère dans a comme attribut.
    Regardez getattr.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup à toi, cela fonctionne

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import Ultraflux_addresses
    import CA_codes
    import minimalmodbus
    import extraction_xml
     
    Modbus_addresses=Ultraflux_addresses.Ultraflux_table()
    JSON_CA=CA_codes.JSON_keys()
     
    #extraction des parametres modbus du fichier de config pour le dispositif en question
    baudrate=extraction_xml.text('/MODBUS/ULTRAFLUX/MODBUS_BAUDRATE')
    parity_value=extraction_xml.text('/MODBUS/ULTRAFLUX/MODBUS_PARITY_VALUE')
    stop_bits_number=extraction_xml.text('/MODBUS/ULTRAFLUX/MODBUS_STOPBITS_NUMBER')
    slave_address=extraction_xml.text('/MODBUS/ULTRAFLUX/SLAVE_ADDRESS')
     
    #extraction des parametres a recuperer ou non
    parameters_to_send={}
    list_parameters=extraction_xml.elements_fils('/DATA')
    for i in range (0, len(list_parameters), 1):
    	a=list_parameters[i]
    	parameters_to_send[getattr(JSON_CA, a)]=extraction_xml.text('/DATA/'+list_parameters[i])
    print(parameters_to_send)
     
    #extraction du tty
    right_tty=extraction_xml.text('/MODBUS/ULTRAFLUX/USB_SERIAL_PORT')

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

Discussions similaires

  1. Utilisation d'un between avec une chaine de caractères
    Par bstevy dans le forum Langage SQL
    Réponses: 22
    Dernier message: 19/01/2015, 10h54
  2. Réponses: 4
    Dernier message: 13/03/2009, 18h20
  3. Réponses: 8
    Dernier message: 06/05/2007, 21h47
  4. Réponses: 4
    Dernier message: 01/02/2007, 19h06
  5. Réponses: 5
    Dernier message: 26/07/2006, 11h13

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