Получить экземпляр класса вызывающего абонента (объект) внутри метода, который был вызван?

Скажем, у меня есть

class A(object):
  def m1(self):
    B().m2()

class B(object):
  def m2(self):
    #return object of caller instance
    #let say 'a' is instance object this method was called from
    return a   

a = A().m1()

person Andrius    schedule 16.06.2015    source источник
comment
Вы должны сначала попробовать поискать. Посмотрите, например, здесь. Альтернативой было бы указать вызывающий объект в качестве аргумента метода.   -  person Kelo    schedule 16.06.2015


Ответы (1)


Вы можете передать экземпляр вызывающего объекта и сделать его параметром самой вызываемой функции. Что-то типа -

class A(object):
  def m1(self):
    B().m2(self)

class B(object):
  def m2(self, obj):
    #return object of caller instance
    #let say 'a' is instance object this method was called from
    return obj   

a = A().m1()
person Anand S Kumar    schedule 16.06.2015
comment
Да, было бы неплохо. Но что, если я не могу позволить себе роскошь пройти мимо этого объекта? Я имею в виду, что у меня нет контроля, когда кто-то вызывает метод m2 из любого другого метода, что они тоже передали бы объект. Поэтому я должен проверить себя внутри m2, чтобы увидеть, из какого объекта он был передан. - person Andrius; 16.06.2015
comment
Вы определяете объект m2? Если это так, то если у m2 есть второй параметр, тогда им обязательно нужно будет передать в него какое-то значение, без передачи объекта, который вы надеялись получить, логика не будет работать правильно, верно? Итак, я предполагаю, что это обеспечит передачу правильного объекта? - person Anand S Kumar; 16.06.2015
comment
Логика заключается в том, что m1 (или любой другой метод), вызывающий m2, не знает ни одного нового аргумента. Он просто называет это m2. И мне нужно изменить m2, чтобы он находил, какой объект его вызвал, и мог что-то сделать с этим объектом. - person Andrius; 17.06.2015