Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 1, 2007 17:54:54

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

взаимодействие классов

Подскажите пожалуйста, как мне из 1 класса, вызвать методы другого класса?
Ситуация:
имеется три файла:
1. dbclass - с классом DBCon
2. mainform - с классом Ui_mainDialog ( гуи на Qt4 )
3. ngmain - основной файл,в котором создаются 2 объекта этих классов. ( mainwindow, и dbase )
Задача: при нажатии кнопки ( описана в mainform ) вызывать метод из dbase ( DBCon ). Как такое реализовать? желательно с примером.. Спасибо



Офлайн

#2 Дек. 1, 2007 18:15:50

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

взаимодействие классов

сделать экземпляры классов (mainwindow dbase) глобальными переменными и дергать нужный метод напрямую:

dbase.my_method()



Офлайн

#3 Дек. 1, 2007 18:17:37

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

взаимодействие классов

эм… а еще есть какие нибудь способы?



Офлайн

#4 Дек. 1, 2007 20:31:58

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

взаимодействие классов

В моём понимании красоты это выглядело бы так:
- Создаём основной класс в “ngmain.ру” и в нём уже создаём два дочерних класса - для гуя и бд;
- В методе инициализации этих класов ( __init__(self, parent) ) передаём в качестве параметра себя же (self)
- Когда надо будет вызвать метод соседнего класса, вызываем его так: self.parent.dbase.my_method()

Надеюсь пример не потерял наглядности, а то я увлёкся немного:) (надо кликнуть мышкой по форме, чтобы увидеть результат)

from PyQt4 import QtCore, QtGui
import sys, os
#————————————————————————————————————————————–
class DBCon(object):
def __init__(self, parent): self.parent = parent
#
def __setParent(self, parent): self.__parent = parent
def __getParent(self): return self.__parent
def __delParent(self): del self.__parent
parent = property(__getParent, __setParent, __delParent, ‘Parent class’)
#
def my_method(self): return ‘OK’
#————————————————————————————————————————————–
class Ui_mainDialog(QtGui.QWidget):
def __init__(self, parent):
self.parent = parent
#
super(Ui_mainDialog, self).__init__()
#
def __setParent(self, parent): self.__parent = parent
def __getParent(self): return self.__parent
def __delParent(self): del self.__parent
parent = property(__getParent, __setParent, __delParent, ‘Parent class’)
#
def mousePressEvent(self, event):
result = self.parent.dbase.my_method()
QtGui.QMessageBox.information(self, ‘The Tool’, u'Result: %s' % unicode(result))
#————————————————————————————————————————————–
class Main(object):
def __init__(self):
self.dbase = DBCon(self)
self.mainwindow = Ui_mainDialog(self)
#
def __setDBCon(self, dbase): self.__dbase = dbase
def __getDBCon(self): return self.__dbase
def __delDBCon(self): del self.__dbase
dbase = property(__getDBCon, __setDBCon, __delDBCon, ‘DB Connection’)
#
def __setUI(self, mainwindow): self.__mainwindow = mainwindow
def __getUI(self): return self.__mainwindow
def __delUI(self): del self.__mainwindow
mainwindow = property(__getUI, __setUI, __delUI, ‘GUI’)

#————————————————————————————————————————————–
app = QtGui.QApplication(sys.argv)
tool = Main()
tool.mainwindow.show()
sys.exit(app.exec_())
#————————————————————————————————————————————–



Отредактировано (Дек. 1, 2007 20:40:16)

Офлайн

#5 Дек. 1, 2007 23:48:14

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

взаимодействие классов

poltergeist
Большое спасибо! все понял :)



Офлайн

#6 Янв. 9, 2008 03:26:36

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

взаимодействие классов

охохо. Извините что поднимаю старую тему. В прошлый раз как то сделал, т.к. там было полегче ( надо было не двусторонню связь так сказать). А сейчас вот проблемка появилась.
poltergeist
подскажи по своему этому коду.
Что делать, если надо сделать связь между тремя классами? :(
Подскажите, где б почитать про классы. Спасибо большое



Отредактировано (Янв. 9, 2008 03:43:13)

Офлайн

#7 Янв. 9, 2008 10:06:19

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

взаимодействие классов

А там без разницы сколько классов общаются между собой, если у них один парент и они знают о существовании друг друга.

Писать пример наверное не буду, просто чтоб сами до этого дошли, а читать нужно теорию ООП (Объектно-ориентированного программирования) и потом уже курить её реализацию и возможности в питоне.

links:
http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование
http://www.python.org/doc/newstyle/



Отредактировано (Янв. 9, 2008 10:07:12)

Офлайн

#8 Янв. 9, 2008 14:53:02

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

взаимодействие классов

спасибо.
Про много классов я потом допер :) А так, надо практиковаться



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version