129 votes

Importer une longue liste de constantes dans un fichier Python

En Python, existe-t-il un analogue de la fonction C une instruction du préprocesseur telle que ?

#define MY_CONSTANT 50

De plus, j'ai une grande liste de constantes que j'aimerais importer dans plusieurs classes. Existe-t-il un analogue à la déclaration des constantes sous la forme d'une longue séquence d'instructions comme celle décrite ci-dessus dans un fichier .py et l'importer dans un autre fichier .py fichier ?

Editer.

Le dossier Constants.py lire :

#!/usr/bin/env python
# encoding: utf-8
"""
Constants.py
"""

MY_CONSTANT_ONE = 50
MY_CONSTANT_TWO = 51

Et myExample.py lire :

#!/usr/bin/env python
# encoding: utf-8
"""
myExample.py
"""

import sys
import os

import Constants

class myExample:
    def __init__(self):
        self.someValueOne = Constants.MY_CONSTANT_ONE + 1
        self.someValueTwo = Constants.MY_CONSTANT_TWO + 1

if __name__ == '__main__':
    x = MyClass()

Editer.

De la part du compilateur,

Erreur de nom : [ ] 'MY_CONSTANT_ONE' n'est pas défini"

fonction init i 13 self.someValueOne = Constants.MY_CONSTANT_ONE + 1 copie sortie Le programme s'est arrêté avec le code #1 après 0.06 secondes.

189voto

Thomas K Points 16753

Python n'est pas prétraité. Vous pouvez simplement créer un fichier myconstants.py :

MY_CONSTANT = 50

L'importation de ces produits fonctionnera parfaitement :

import myconstants
print myconstants.MY_CONSTANT * 2

24voto

delnan Points 52260

Python n'a pas de préprocesseur, ni de constantes dans le sens où elles ne peuvent pas être modifiées - vous pouvez toujours changer (presque, vous pouvez émuler des propriétés d'objet constantes, mais le faire au nom de la constance est rarement fait et n'est pas considéré comme utile) tout. Lors de la définition d'une constante, nous définissons un nom en majuscules avec des points de suspension et nous nous en tenons là - "Nous sommes tous des adultes consentants ici", aucun homme sain d'esprit ne changerait une constante. À moins, bien sûr, qu'il ait de très bonnes raisons et qu'il sache exactement ce qu'il fait, auquel cas vous ne pouvez pas (et ne devriez probablement pas) l'en empêcher.

Mais vous pouvez bien sûr définir un nom de niveau module avec une valeur et l'utiliser dans un autre module. Ce n'est pas spécifique aux constantes ou quoi que ce soit d'autre, renseignez-vous sur le système des modules.

# a.py
MY_CONSTANT = ...

# b.py
import a
print a.MY_CONSTANT

17voto

tony Points 762

Et bien sûr, vous pouvez le faire :

# a.py
MY_CONSTANT = ...

# b.py
from a import *
print MY_CONSTANT

8voto

NPE Points 169956

Bien sûr, vous pouvez placer vos constantes dans un module séparé. Par exemple :

const.py :

A = 12
B = 'abc'
C = 1.2

main.py :

import const

print const.A, const.B, const.C

Notez que comme déclaré ci-dessus, A , B et C sont des variables, c'est-à-dire qu'elles peuvent être modifiées au moment de l'exécution.

7voto

Artsiom Rudzenka Points 9771

Essayez de regarder Créer des constantes à l'aide d'un module "settings" ? et Puis-je empêcher la modification d'un objet en Python ?

Un autre lien utile : http://code.activestate.com/recipes/65207-constants-in-python/ nous parle de l'option suivante :

from copy import deepcopy

class const(object):

    def __setattr__(self, name, value):
        if self.__dict__.has_key(name):
            print 'NO WAY this is a const' # put here anything you want(throw exc and etc)
            return deepcopy(self.__dict__[name])
        self.__dict__[name] = value

    def __getattr__(self, name, value):
        if self.__dict__.has_key(name):
            return deepcopy(self.__dict__[name])

    def __delattr__(self, item):
        if self.__dict__.has_key(item):
            print 'NOOOOO' # throw exception if needed

CONST = const()
CONST.Constant1 = 111
CONST.Constant1 = 12
print a.Constant1 # 111
CONST.Constant2 = 'tst'
CONST.Constant2 = 'tst1'
print a.Constant2 # 'tst'

Vous pouvez donc créer une classe comme celle-ci et l'importer à partir de votre module contants.py. Cela vous permettra d'être sûr que la valeur ne sera pas modifiée ou supprimée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X