Как "идеологически верно" задавать константы в python? И вообще, при объектно ориентированном программировании?

Компьютеры программирование python ООП

В языке python нет констант, однако они часто нужны по логике самой решаемой задачи.

Например:
нужно сделать: db = MySQLdb.connect(host="localhost", user="wiki", passwd="1111", db="wiki", charset='utf8')
Логичо хранить имя хоста пользователя и пароль где нибудь в константах для улучшения переносимости.

Как "идеологически правильно" хранить эти значения с точки зрения ООП ?
И как можно реализовать это средствами языка python?
Ответы:
>> Логичо хранить имя хоста пользователя и пароль где нибудь в константах для улучшения переносимости.
С точки зрения ООП (впрочем как и СП) идеологически верно, чтобы константы поддерживались языком на уровне синтаксиса. В питоне же и СП, и ООП, и ФП реализованы коряво.
В Питоне принято называть константы в верхнем регистре. Но это лишь соглашение.
Для Python2.x можно сделать так:
class _Constants:
 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
 def __delattr__(self, name):
   if self.__dict__.has_key(name):
     raise self.ConstError, "Can't unbind const(%s)"%name
   raise NameError, name
import sys
sys.modules[__name__] = _Constants()


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.