Python. Передача экземпляров в inner class
Можно ли во внутреннем классе обратиться к экземпляру внешнего класса, без указания его в качестве атрибута конструктора внутреннего класса?
Рассмотрим пример
class A:
def __init__(self, atr1):
self.connect = f'connect A class {atr1}'
class B:
def __init__(self, time):
self.time = time
self.connect = super(A).connect
В результате ожидаю получить следующее:
obj_A = A('atr1')
obj_B1 = obj_A.B(10)
obj_B2 = obj_A.B(100)
print(obj_A.connect) # connect A class atr1
print(obj_B1.connect) # connect A class atr1
print(obj_B2.connect) # connect A class atr1
Возможно, мне не стоит использовать внутренний класс, а стоит рассмотреть другие принципы ООП?
Пробовал воспользоваться get методом, но не вышло ожидаемого результата.
class A:
def __init__(self, atr1):
self.connect = f'connect A class {atr1}'
class B:
def __init__(self, time):
super(A.B, self).__init__()
self.time = time
def get_B(self, time):
return A(self).B(time)
obj = A('atr1')
obj2 = obj.B(222)
obj3 = obj.B(122)
Из обсуждения пришел к следующему:
class A:
def __init__(self, atr1):
self.connect = f'connect A class {atr1}'
class B:
def __init__(self, time, obj: A):
self.time = time
self.obj_A = obj
self.connect = obj_A.connect
if __name__ == '__main__':
obj_A = A('atr1')
obj_B1 = B(10, obj_A)
obj_B2 = B(100, obj_A)
print(obj_A.connect) # connect A class atr1
print(obj_B1.connect) # connect A class atr1
print(obj_B2.connect) # connect A class atr1
Это работает, но не дает лаконичности кода для вызова объектов завязанных на родителе.
Ответы (1 шт):
не очень понятно, чего вы хотите добиться. у вас получается, что объекты класса B должны быть зависимы от конкретного объекта класса А, а вовсе даже не от класса А
в явном виде то, что в спрашиваете, может быть реализовано вот так, ноя не очень понимаю смысл такого действа
def init(self, time):
self.time = time
class A:
def __init__(self, atr1):
self.connect = f'connect A class {atr1}'
self.B = type('B', (object,), {'connect': f'connect A class {atr1}', '__init__': init})
obj_A = A('atr1')
obj_B1 = obj_A.B(10)
obj_B2 = obj_A.B(100)
print(obj_A.connect) # connect A class atr1
print(obj_B1.connect) # connect A class atr1
print(obj_B2.connect) # connect A class atr1