Самый простой, и, как правило, наиболее вещий, способ сделать это, чтобы полагаться на утиной типизации, поэтому зависимости не явно в статическом коде и нет округлости.
Причина вам нужен интерфейс в Java, потому что Java заставляет B
класс, чтобы дать статический тип его a
члена, а так же для параметра конструктора a
. В Python нет необходимости, потому что переменные не имеют типов (значения, конечно, но любая переменная может содержать значение любого типа). Если вы хотите явно принудительно провести проверку, вы можете указать , используя интерфейс abc
), но он действительно ничего не покупает. Лучше просто дайте уток быть уток:
class X(object):
def x1(self):
self.b = B(self)
self.b.do_something()
def a1(self):
# ...
class B(object):
def __init__(self, a):
self.a = a
def do_something(self):
self.a.a1()
Конечно, есть еще динамический округлость, но это не проблема. (Ну, круговой ссылок может быть проблемой, но обычно этого нет, и это не проблема, о которой вы беспокоились, и она ничем не отличается от Java ...)