Найти - Пользователи
Полная версия: Вызвать метод
Начало » Python для новичков » Вызвать метод
1 2
ruthven
Добрый день. Имеется примерно такая конструкция:
class AAA(object):
    def trace(message):
        print(message)
    def start():
        b = BBB()
        b.run()
class BBB(object):
    def trace(message, AAAtrace):
        AAAtrace.trace(message)
    def run():
        self.trace('Строка текста')
т.е. будет объект класса AAA, в нем создается объект класса BBB, и из этого объекта должен запуститься метод класса AAA.
Или как реализовать - будет объект с tkinter Text(), из этого объекта вызывается другой объект, который должен выводить в этом Text() свои сообщения?
terabayt
вам ооочень нужно почитать книгу!!!
class AAA(object):
    def trace(self, message):
        print(message)
    def start(self):
        b = BBB()
        b.run()
class BBB(object):
    def trace(self, message):
        print message
    def run(self):
        self.trace('hello')
a = AAA()
a.start()
ruthven
terabayt Вы неправильно меня поняли. В вашем коде ‘hello’ печатает метод BBB, а надо чтобы метод AAA. Наверно я плохо объяснил, потому что книгу не прочитал, да?
terabayt
ruthven
Наверно я плохо объяснил, потому что книгу не прочитал, да?
да! как мимнимум вы бы self написали
и вопросы отпали бы

что такое AAAtrace?
то что вы хотите сделать не имеет никакого практического смысла
насколько я понял, то вы хотите что-то этого?
class AAA(object):
    def trace(self, message):
        print(message)
    def start(self):
        b = BBB()
        self.trace(b.run())
class BBB(object):
    def run(self):
        return 'hello'
a = AAA()
a.start()

terabayt
вам ооочень нужно почитать книгу!!!
ruthven
terabayt BBB может посылать на печать не только одну строку, т.е. return не катит.

то что вы хотите сделать не имеет никакого практического смысла
Посоветуйте тогда, пожалуйста, как реализовать такую штуку - Имеется класс AAA, в нем с помощью модуля tkinter будет текстовая область (объект Text из tkinter), из AAA запускается BBB, который в эту текстовую область передаёт строки (сколько их будет заранее неизвестно)
Shaman
Классически, объекту может передаваться ссылка на объект-владелец, посредством которой можно или вызывать методы владельца, или слать ему сообщения. Применительно к tkinter ничего конкретного посоветовать не могу.
ruthven
Shaman А может можно каким-либо способом передать ссылку не на ААА, а на сам объект Text() ?
terabayt
ruthven
Посоветуйте тогда, пожалуйста, как реализовать такую штуку
ага, вы хотите чтоьы класс Б постоянно имел возможность вставлять в текстовое поле, что объявлено в классе А?!
в гуи не очень, поэтому не скажу верно ли так
такие вопросы нужно писать в ветке ГУИ!
import Tkinter
class AAA(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, parent, background="white")
        self.parent = parent
    def initUI(self):
        self.parent.title("Simple")
        self.pack(fill=Tkinter.BOTH, expand=1)
        self.text = Tkinter.Text(self)
        self.text.place(x=50, y=50)
        button = Tkinter.Button(self, text="Go", command=self.bb)
        button.place(x=50, y=10)
    def bb(self):
        b = BBB(self)
        b.run()
    def set_text(self, s):
        self.text.insert(1.0, s)
class BBB:
    def __init__(self, parent):
        self.parent =  parent
    def run(self):
        for i in xrange(10):
            self.parent.set_text(' -- %d --\n' % i)
def main():
    root = Tkinter.Tk()
    root.geometry("650x550+300+300")
    a = AAA(root)
    a.initUI()
    root.mainloop()
if __name__ == '__main__':
    main()
ruthven
terabayt Вроде бы суть уловил, сейчас попробую. Спасибо.
Shaman
ruthven
Shaman А может можно каким-либо способом передать ссылку не на ААА, а на сам объект Text() ?
Можно передавать ссылку на что угодно существующее.
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