Форум сайта python.su
Добрый день, есть несколько классов, каждый из них использует экземпляр класса DB для доступа к базе данных.
Вопрос как сделать так, чтобы все эти классы использовали один и тот же экземпляр DB, чтобы не плодить экземпляры и коннекшены?
Предположительно, есть два варианта:
1. Создать некий класс, который будет выдавать ссылку на экземпляр класса при запросе, что-то типа get_object('DB')
2. Передавать в каждый класс, где нужна работа с DB ссылку на ранее созданный объект, но вопрос, есть ли в python ссылки?
Офлайн
class Database:
pass
class Foo:
def __init__(self, db):
self.db = db
db = Database()
foo1 = Foo(db)
foo2 = Foo(db)
foo3 = Foo(db)
Офлайн
В питоне практически все что имеет имя - ссылка, за редким исключением =)
Офлайн
Понятно, спасибо большое!
Офлайн
> В питоне практически все что имеет имя - ссылка, за редким исключением =)
Без исключений. Или поправь меня?
Есть объекты, есть ссылки на них. Все имена, это ссылки на объекты. Содержимое списка - это не именованные ссылки. a = 1 и b = 1 - a и b это ссылки на один и тот же объект, т.е. a is b -> True.
Дальше - больше :-). Класс - это объект, экземпляр класса, типы - это объекты. Функция (метод), лямбда - это объекты. Код, который содержит метод - это объект. Ну и так далее, я думаю, Chuck, ты понял мою мысль.
..bw
Офлайн
поправить не могу.
но чую, что где-то есть подвох. хотя может чувство меня и обманывает.
Отредактировано (Ноя. 14, 2008 09:27:59)
Офлайн
Подумал. Есть такое предположение.
Если продложать рассуждать в рамках сишных аналогий с указателями (а “имя” внутрях питона вроде и реализуется как указатель).
Нельзя сделать ссылку на само имя. А в С можно например можно сделать указатель на указатель %))
Отредактировано (Ноя. 14, 2008 09:53:42)
Офлайн
А если еще подумать.
То в Python'е не существует такого понятия как имя переменное (как мне представляеся) на уровне байт-кода. Вспомни откуда у нас вытягиваются объекты по имени - правильно из словаря экземпляра, класса или одного из подклассов. То же самое относится и к локальному и глобальному пространствам. Так же существуют словари предоставляющие доступ к локальным или глобальным переменным. А в таких словарях ключами являются строка-объект.
Так что ложки нет :-).
..bw
Офлайн
ым… но при этом они как-то умудряются ссылаться на конкретный адрес в памяти, который можно даже посмотреть id().
Не в словаре-же объект лежит.
Отредактировано (Ноя. 14, 2008 10:09:12)
Офлайн
ну да, все так.
Но адреса памяти где-то ведь хранятся.
Да и сборщик мусора как-то учитывает количество имен.
Значит скорее всего есть какая-то хреновина, в которой прописаны имена и адреса =)
Офлайн