Найти - Пользователи
Полная версия: oop для малышей, часть 2
Начало » Python для новичков » oop для малышей, часть 2
1 2
del3d
Всем здрасти..

Имеется класс 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):
???
PooH
Ну как-то так:
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
igor.kaist
PooH, а я уж боялся что кроме меня никто так не делает.
Вообще, правильно ли это передавать self конструктору класса? Есть ли более правильные методы?
Zubchick
Зачем так вообще делать? Это как-то извратно по-моему. Как щяс помню, учили чтобы объект который агрегируют не должен ничего знать об агрегате. И вообще, чем самостоятельней объекты тем лучше.
del3d
У меня класс А - главное окно приложения, класс В - диалоговое окно с добавлением информации в БД.
В конструкторе главного окна создается подключение к БД. В диалоговом требуется это подключение..
Вот я и думаю как к нему обратиться..
PooH
igor.kaist
PooH, а я уж боялся что кроме меня никто так не делает.
Вообще, правильно ли это передавать self конструктору класса? Есть ли более правильные методы?
А я так и не делаю :) Но если очень хочется, то можно. У меня обычно несколько модулей-солитонов - настройки, подключение к базе, все остальное только на событиях. Twisted быстро отучает от дурных привычек :)
igor.kaist
Zubchick
И вообще, чем самостоятельней объекты тем лучше.
не всегда это подходит. У меня примерно такая же ситуация, как описал del3d, только в его случае, в конструктор класса можно передать просто db. В моем случае передавать нужно слишком много аргументов, начиная от базы данных, заканчивая GUI. У меня классы в модулях подгружаются динамически, как плагины, и тем более, хотелось бы добираться из любого класса в любой другой, чтоб было больше гибкости. Например, захотел я, чтоб новый плагин добавлял в главное окно приложения свою кнопку - легко, несмотря на то что этой возможности изначально “не предусмотрено”.
Долго думал, как это легче спроектировать, но остановился на том, что как раз таки и описал PooH
Evg
del3d
У меня класс А - главное окно приложения, класс В - диалоговое окно с добавлением информации в БД.
В конструкторе главного окна создается подключение к БД. В диалоговом требуется это подключение..
Вот я и думаю как к нему обратиться..
Типичная задача для синглетона. Просто сделать модуль в котором сразу создается это соединение, и потом просто импортировать откуда нужно.
Андрей Светлов
синглетоны - зло. Легко сделать, трудно сопровождать.
Когда создается синглетон? Кем? Когда и кем он уничтожается?
Прямые ссылки всяко лучше почти всегда.
Evg
Ну так я посоветовал его через модуль делать, а не через объект)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB