n_string
1. Я так понимаю в Python нет констант, тогда как объявить переменную только для чтения, без возможности переопределения
Можно поискать на pipy, уверен там есть модули для определения констант, я обычно делаю так:
# elements.py
import sys
from user_modules.util import ConstScope
namespace = ConstScope()
namespace.nothing = 0
namespace.fire = 1
namespace.ice = 2
namespace.earth = 3
namespace.poison = 4
namespace.thunder = 5
namespace.wind = 6
namespace.water = 7
namespace.holy = 8
namespace.names = ('Nothing', 'Fire', 'Ice', 'Earth',
'Poison', 'Thunder', 'Wind', 'Water', 'Holy')
sys.modules[__name__] = namespace
и юзаю так:
>>> import elements
>>> elements.holy
8
>>> elements.holy = 10
Traceback (most recent call last):
File "D:\usr\dev\python\src\projects\TripleTriad\p.py", line 4, in <module>
elements.holy = 10
File "D:\usr\dev\python\import\user_modules\util.py", line 18, in __setattr__
self.__class__.__name__))
ConstError: Can't rebind name 'holy' in ConstScope instance
в
user_modules.utilкроме прочего есть два класса(рецепт из cookbook'a):
class Immutable(object):
'''
Mixin-класс предназначен для определения классов без возможности
изменения атрибутов'''
def __setattr__(self, name, value):
if name in self.__dict__:
raise ConstError("Can't rebind name '%s' in %s instance" % (name,
self.__class__.__name__))
self.__dict__[name] = value
def __delattr__(self, name):
if name in self.__dict__:
raise ConstError("Can't unbind name '%s' in %s instance" % (name,
self.__class__.__name__))
raise AttributeError("'%s' object has no attribute '%s'" % (
self.__class__.__name__, name))
class ConstScope(Immutable):
'''
Класс реализует пространство имен с неизменяемыми атрибутами'''
def __init__(self, **kwargs):
if kwargs:
self.__dict__.update(kwargs)
также можно воспользоватся namedtuple
http://code.activestate.com/recipes/500261/ЗЫ: на ваши вопросы с большей вероятностью ответят, если вы будете создавать отдельные топики для каждого