Steven D'Aprano wrote: > Yes, that would be how I interpret constants: You want a name which can't > be re-bound to something else. > > One work-around is to use the convention of writing the name in all caps: > > CONSTANT = some_value > > and then trust that your module user doesn't rebind CONSTANT. I'd like to > see support for something a little stronger than just "cross your fingers > and hope", without necessarily going all the way to Pascal's full > enforcement of constants. "We're all adults here" -- if somebody *really* > wants to rebind CONSTANT, I'm not going to stop them, but I want them to > jump through a hoop to do it, as a reminder that the module creator thinks > they shouldn't be doing it.
Another workaround if you tradeoff strictness with convenience is define a CONST metaclass in which contants are accessed as attributes and which raises an Exception in __setattr__: class CONST(type): def __new__(cls, name, bases, dict): def __setattr__(self,attr,val): raise AttributeError('Cannot reassign constant %s.%s' % (name, attr)) cls.__setattr__ = __setattr__ return type.__new__(cls, name, bases, dict) class PhysicsConstants(object): __metaclass__ = CONST c = 2.9979246e+08 >>> PhysicsConstants.c = 0 AttributeError: Cannot reassign constant PhysicsConstants.c George -- http://mail.python.org/mailman/listinfo/python-list