Найти - Пользователи
Полная версия: Обратная связь между классами
Начало » Python для новичков » Обратная связь между классами
1
Xcopy
Всем привет!
Сразу перейду к вопросу:

У меня есть класс А и B

class A(object):
    def __init_(self):
        pass
class B(object):
    def __init_(self):
        self.objectA = A()
    def func(self):
        print("HELLO WORLD!")
   

Вопрос такой: как из объекта класса А обратиться к функции func класса B в котором создан объект класа A?
Я решил эту проблемму передавая в объект класса А ссылку на функцию func при создании объекта objectA.
То, что сделал я приемлимо с точки зрения хорошего python кода??
И есть ли какие-нибудь более изящные методы решения этой задачи?

Заранее спасибо!
doza_and
Можно с помощью пакета inspect http://docs.python.org/2/library/inspect.html
провести анализ стека вызовов и найти того кто вызвал конструктор. Но передать ссылку на функцию? как сделали вы гораздо лучше.
Xcopy
doza_and, Спасибо большое!
Soteric
Все зависит от контекста задачи. Где-то это допустимый код, где-то можно сделать “правильнее”. Обычно мне требовался объект целиком, ссылку на отдельный метод никогда не передавал.
Xcopy
Soteric, пишу клиент для чата.
У меня есть главный класс Client:
from authorization import AuthorizationWidget
class Client(object):
    def __init__(self):
        self.authWidget = AuthorizationWidget(self.authValidator)
        self.authWidget.show()
    def authValidator(self, nick):
        if len(nick) > 15:
            return "nick is too long"
        else:
  #обращение к серверу и бла бла... и если ник верный, то 
            return True
            self.authWidget.close()
client = Client()

Этот класс создает authWidget - объект класса AuthorizationWidget. AuthorizationWidget - это небольшое окошко для авторизации пользователя по нику.

По моей задумке, только класс Client может обращаться к серверу, поэтому, класс AuthorizationWidget должен обратиться к методу authValidator класса Client, чтобы он проверил ник введенный в поле класса AuthorizationWidget на правильность)

Ну вот поэтому я и передаю в конструктор AuthorizationWidget ссылку на функцию authValidator
Soteric
Думаю все в порядке :)
Xcopy
Soteric, Спасибо!)
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