Steven W. Orr a écrit : > On Thursday, Feb 1st 2007 at 21:45 +0100, quoth Bruno Desthuilliers: > (snip)
> =>irrational_const = const.__class__() > =>even_const = const.__class__() > => > =>Now while I find this hack interesting, it's also totally unpythonic > =>IMHO. The usual convention is to use ALL_UPPER names for (pseudo) > =>symbolic constants, and I don't see any reason to forcefit B&D languages > =>concepts into Python. > > Ok. Now *maybe* we're getting to where I want to be. My const.py now looks > like this: > > class _const: > class ConstError(TypeError): pass > def __setattr__(self,name,value): > if self.__dict__.has_key(name): > raise self.ConstError, "Can't rebind const(%s)"%name > self.__dict__[name]=value > > import sys > sys.modules[__name__]=_const() > > and in a seperate module call key_func_consts I say: > > import const > # Define constants for Key Function Field. > KeyFuncConst = const.__class__() > KeyFuncConst.NotDefined = 0x00 > > And in my main module I have > #! /usr/bin/python > import const Note that you don't need it if you don't use it directly. > import key_func_consts > print KeyFuncConst.MSK > > > but the last print fails with A NameError, of course. key_func_consts is the module, KeyFuncConst is an attribute of this module. You either need to 1/ use a fully qualified name: import key_func_consts print key_func_consts.KeyFuncConst.MSK or 2/ import the KeyFuncConst name directly: from key_func_consts import KeyFuncConst print KeyFuncConst.MSK or 3/ use the same dirty hack as in the const module - but this is starting to be very ugly and unpythonic, so I won't give an implementation example !-) Also, note that since you did not define KeyFuncConst.MSK in the key_func_const module, you'll then have an AttributeError !-) > The goal is to be able to create classes of global constants. Then just define your "constants" in the module and import it: # key_func_const.py NOT_DEFINED = 0x00 MSK = 42 # main.py import key_func_const print key_func_const.NOT_DEFINED print key_func_const.MSK > Do I need to get the KeyFuncConst object into sys.modules somehow? I know > I'm close. Nope. You're going the wrong direction. It's a typical case of arbitrary overcomplexification. Please re-read the last paragraph of my previous post. By convention, in Python, ALL_UPPER names means "constant value, dont touch". The example I give you above is the Pythonic way of doing things, it's dead simple, and *it just works* - so why bother messing with sys.modules hacks ? -- http://mail.python.org/mailman/listinfo/python-list