Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2010 09:43:09

del3d
От:
Зарегистрирован: 2010-03-12
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

Всем здрасти..

Имеется класс 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)

Офлайн

#2 Апрель 27, 2010 10:21:21

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

Ну как-то так:

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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Апрель 27, 2010 10:31:54

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

PooH, а я уж боялся что кроме меня никто так не делает.
Вообще, правильно ли это передавать self конструктору класса? Есть ли более правильные методы?



Офлайн

#4 Апрель 27, 2010 10:58:26

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

Зачем так вообще делать? Это как-то извратно по-моему. Как щяс помню, учили чтобы объект который агрегируют не должен ничего знать об агрегате. И вообще, чем самостоятельней объекты тем лучше.



Офлайн

#5 Апрель 27, 2010 11:52:34

del3d
От:
Зарегистрирован: 2010-03-12
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

У меня класс А - главное окно приложения, класс В - диалоговое окно с добавлением информации в БД.
В конструкторе главного окна создается подключение к БД. В диалоговом требуется это подключение..
Вот я и думаю как к нему обратиться..



Офлайн

#6 Апрель 27, 2010 11:55:17

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

igor.kaist
PooH, а я уж боялся что кроме меня никто так не делает.
Вообще, правильно ли это передавать self конструктору класса? Есть ли более правильные методы?
А я так и не делаю :) Но если очень хочется, то можно. У меня обычно несколько модулей-солитонов - настройки, подключение к базе, все остальное только на событиях. Twisted быстро отучает от дурных привычек :)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Апрель 28, 2010 10:34:18

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

Zubchick
И вообще, чем самостоятельней объекты тем лучше.
не всегда это подходит. У меня примерно такая же ситуация, как описал del3d, только в его случае, в конструктор класса можно передать просто db. В моем случае передавать нужно слишком много аргументов, начиная от базы данных, заканчивая GUI. У меня классы в модулях подгружаются динамически, как плагины, и тем более, хотелось бы добираться из любого класса в любой другой, чтоб было больше гибкости. Например, захотел я, чтоб новый плагин добавлял в главное окно приложения свою кнопку - легко, несмотря на то что этой возможности изначально “не предусмотрено”.
Долго думал, как это легче спроектировать, но остановился на том, что как раз таки и описал PooH



Офлайн

#8 Апрель 28, 2010 15:56:04

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

del3d
У меня класс А - главное окно приложения, класс В - диалоговое окно с добавлением информации в БД.
В конструкторе главного окна создается подключение к БД. В диалоговом требуется это подключение..
Вот я и думаю как к нему обратиться..
Типичная задача для синглетона. Просто сделать модуль в котором сразу создается это соединение, и потом просто импортировать откуда нужно.



Офлайн

#9 Апрель 28, 2010 16:12:24

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

oop для малышей, часть 2

синглетоны - зло. Легко сделать, трудно сопровождать.
Когда создается синглетон? Кем? Когда и кем он уничтожается?
Прямые ссылки всяко лучше почти всегда.



Офлайн

#10 Апрель 28, 2010 16:38:59

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

oop для малышей, часть 2

Ну так я посоветовал его через модуль делать, а не через объект)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version