Форум сайта python.su
Всем здрасти..
Имеется класс A и класс B.
1. Создаем объект a от A.
2. Создаем объект b от B, который является атрибутом a.
3. Создаем атрибут объекта а - a.conn.
Вопрос, как из метода класса B обратиться к a.conn?
class A:
def create_conn(self):
self.conn = 10
def create_b(self):
self.b = B()
class B:
def get_conn(self):
???
Отредактировано (Апрель 29, 2010 09:07:26)
Офлайн
Ну как-то так:
class A:
def create_conn(self):
self.conn = 10
def create_b(self):
self.b = B(self)
class B:
def __init__(self, owner):
self.owner = owner
def get_conn(self):
self.owner.conn
Офлайн
PooH, а я уж боялся что кроме меня никто так не делает.
Вообще, правильно ли это передавать self конструктору класса? Есть ли более правильные методы?
Офлайн
Зачем так вообще делать? Это как-то извратно по-моему. Как щяс помню, учили чтобы объект который агрегируют не должен ничего знать об агрегате. И вообще, чем самостоятельней объекты тем лучше.
Офлайн
У меня класс А - главное окно приложения, класс В - диалоговое окно с добавлением информации в БД.
В конструкторе главного окна создается подключение к БД. В диалоговом требуется это подключение..
Вот я и думаю как к нему обратиться..
Офлайн
igor.kaistА я так и не делаю :) Но если очень хочется, то можно. У меня обычно несколько модулей-солитонов - настройки, подключение к базе, все остальное только на событиях. Twisted быстро отучает от дурных привычек :)
PooH, а я уж боялся что кроме меня никто так не делает.
Вообще, правильно ли это передавать self конструктору класса? Есть ли более правильные методы?
Офлайн
Zubchickне всегда это подходит. У меня примерно такая же ситуация, как описал del3d, только в его случае, в конструктор класса можно передать просто db. В моем случае передавать нужно слишком много аргументов, начиная от базы данных, заканчивая GUI. У меня классы в модулях подгружаются динамически, как плагины, и тем более, хотелось бы добираться из любого класса в любой другой, чтоб было больше гибкости. Например, захотел я, чтоб новый плагин добавлял в главное окно приложения свою кнопку - легко, несмотря на то что этой возможности изначально “не предусмотрено”.
И вообще, чем самостоятельней объекты тем лучше.
Офлайн
del3dТипичная задача для синглетона. Просто сделать модуль в котором сразу создается это соединение, и потом просто импортировать откуда нужно.
У меня класс А - главное окно приложения, класс В - диалоговое окно с добавлением информации в БД.
В конструкторе главного окна создается подключение к БД. В диалоговом требуется это подключение..
Вот я и думаю как к нему обратиться..
Офлайн
синглетоны - зло. Легко сделать, трудно сопровождать.
Когда создается синглетон? Кем? Когда и кем он уничтожается?
Прямые ссылки всяко лучше почти всегда.
Офлайн
Ну так я посоветовал его через модуль делать, а не через объект)
Офлайн