Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 9, 2011 05:37:08

Atterratio
От:
Зарегистрирован: 2011-09-17
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

Есть два класса, в каждом из которых несколько методов. В первом классе инициализируется второй, но потом есть необходимость из второго класса вызвать метод первого, или изменить атрибут. Сейчас в таких случаях я передаю “self” из первого во второй. Выглядит это примерно так:

class One:
def __init__(self):
pass

def some_metod_one(self):
self.classTwo = Two(self)
#Можно передавать не при инициализации, а при вызове метода, но это мелочи.
self.classTwo.some_metod_one()

def some_metod_two(self):
print('Выполнено!')

class Two:
def __init__(self, classOne):
self.classOne = classOne

def some_metod_one(self):
self.classOne.some_metod_two()

if __name__ == '__main__':
classOne = One()
classOne.some_metod_one()
Я правильно делаю, или такая ситуация возникает потому что я ничего не смыслю в ООП?



Отредактировано (Дек. 9, 2011 10:31:17)

Офлайн

#2 Дек. 9, 2011 10:18:26

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

Это индусский код или правильный выход?

Atterratio
В первом классе специализируется второй
Очень расплывчато описали. Но если речь идет именно о специализации, то класс Two должен наследовать от One



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

Офлайн

#3 Дек. 9, 2011 10:30:19

Atterratio
От:
Зарегистрирован: 2011-09-17
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

Не специализируется, а инициализируется. Это я воспользовался автоисправлением в FF не посмотрев.



Офлайн

#4 Дек. 9, 2011 14:10:33

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

+1 за наследование.
Вот, например: http://www.python.org/download/releases/2.2.3/descrintro/#cooperation



Офлайн

#5 Дек. 9, 2011 14:33:27

Atterratio
От:
Зарегистрирован: 2011-09-17
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

Не… тогда бы мне было проще в один класс объеденить… по классам то вообще разделено потому, что дин гласс отвечает за Gui а второй за сервервер принимающий сообщения(т.е. разделено по смысловой нагрузке).



Офлайн

#6 Дек. 9, 2011 18:07:49

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

А зачем тогда одному классу менять атрибуты второго?



Офлайн

#7 Дек. 10, 2011 01:55:57

Atterratio
От:
Зарегистрирован: 2011-09-17
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

Lexander
А зачем тогда одному классу менять атрибуты второго?
Что бы вывести в Gui то что получено по сети. Так… и вообще почему мы начали конкретизировать ситуацию.
Конкретный вопрос: “Как соотносится с правилами написания хорошего кода передача первого объекта, во второй инициированный в первом, для последующего вызова методов первого объекта из второго?”



Нифига себе, спам)))



Отредактировано (Дек. 10, 2011 02:21:22)

Офлайн

#8 Дек. 10, 2011 17:26:11

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

Это индусский код или правильный выход?

Atterratio
Как соотносится с правилами написания хорошего кода передача первого объекта, во второй инициированный в первом, для последующего вызова методов первого объекта из второго?
плохо соотносится.



Офлайн

#9 Дек. 10, 2011 21:59:10

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

А по-моему нормально :) Похоже на MVP паттерн. One - это Presenter, Two - это View. Один отвечает за логику и связь с моделью. Другой управляет виджетами и слушает события со стороны пользователя.



Офлайн

#10 Дек. 11, 2011 01:51:21

Atterratio
От:
Зарегистрирован: 2011-09-17
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Это индусский код или правильный выход?

Из-за разброда тут я поразмышлял сам, и решил, что это работает, и вполне приемлемо, если не запутывает логику программы.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version