Le module python suivant est destiné à servir de base pour la gestion "constante" en python. Le cas d'utilisation est la suivante:Demande de commentaires: usine de classe python pour le groupe de valeurs constantes
- un groupe des constantes (essentiellement des « noms ») qui appartiennent en même temps que leurs valeurs dans un dictionnaire
- avec ce dictionnaire lié à la variable de classe d'une classe est créée et Exécuter- instantinated temps
- les attributs de cette classe sont les noms des constantes, leurs valeurs sont les constantes elles-mêmes
code:
class ConstantError(Exception):
def __init__(self, msg):
self._msg = msg
class Constant(object):
def __init__(self, name):
self._name = name
def __get__(self, instance, owner):
return owner._content[self._name]
def __set__(self, instance, value):
raise ConstantError, 'Illegal use of constant'
def make_const(name, content):
class temp(object):
_content = content
def __init__(self):
for k in temp._content:
setattr(temp, k, Constant(k))
temp.__name__ = name + 'Constant'
return temp()
num_const = make_const('numeric', {
'one': 1,
'two': 2
})
str_const = make_const('string', {
'one': '1',
'two': '2'
})
Utilisation:
>>> from const import *
>>> num_const
<const.numericConstant object at 0x7f03ca51d5d0>
>>> str_const
<const.stringConstant object at 0x7f03ca51d710>
>>> num_const.one
1
>>> str_const.two
'2'
>>> str_const.one = 'foo'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "const.py", line 16, in __set__
raise ConstantError, 'Illegal use of constant'
const.ConstantError
>>>
S'il vous plaît, commenter la conception, la mise en œuvre et de la correspondance aux directives de codage de python.
+1 pour votre raison, en Python, il se résume souvent à utiliser simplement la bonne combinaison de Dicts, tuples et des listes et vous avez terminé. – u0b34a0f6ae
"Votre design semble apporter d'autres fonctionnalités de langages en python." Ceci est intentionnel :-) Fondamentalement, j'ai besoin de quelque chose qui est assez proche des macros C. Imaginez une fonction C avec un argument "bit field", que vous voulez appeler via 'ctypes'. Alors c'est sympa d'avoir des symboles pour les 'ou 'au lieu des nombres. –
@ht: vous devez vouloir dire bitwise ou c'est '|' en Python.Notez que les ensembles et les bitflags se comportent de la même manière avec l'opérateur '|' - donc en Python, vous pouvez implémenter ces drapeaux de combinaison comme ints ou sets si vous le souhaitez. – u0b34a0f6ae