У меня очень странная проблема.
Мне нужно вернуть объект класса, чтобы вызвать функцию, которая должна вернуть объект класса, который ее вызвал. Я знаю я знаю. Просто подумайте об этом как обдуманном упражнении, хотя для меня это очень реальная потребность.
def baz():
# return the object instance that calls me.
class Foo():
def bar(self, func):
return func() # should return the Foo object but how???
new_foo = Foo()
new_foo_instance = new_foo.bar(baz)
возможно ли написать что-нибудь в baz()
, которое будет возвращать объект, который вызвал его?
РЕДАКТИРОВАТЬ:
чтобы ответить на комментарии:
Я пытался использовать inspect, но безуспешно, я даже просмотрел весь стек, но не могу найти запись, соответствующую объекту new_foo
:
new_foo
выглядит так, когда я его распечатал: <__main__.Foo object at 0x0000029AAFC4C780>
когда я распечатал весь стек, эта запись не была найдена в нем:
def baz():
print(inspect.stack())
return inspect.stack() #[1][3]
>>> [FrameInfo(frame=<frame object at 0x0000029AADB49648>, filename='return_caller.py', lineno=5, function='baz', code_context=[' print(inspect.stack())\n'], index=0), FrameInfo(frame=<frame object at 0x0000029AAD8F0DE8>, filename='return_caller.py', lineno=11, function='bar', code_context=[' return func() # should return the Foo object but how???\n'], index=0), FrameInfo(frame=<frame object at 0x0000029AAD8AC588>, filename='return_caller.py', lineno=19, function='<module>', code_context=['new_foo_instance = new_foo.bar(baz)\n'], index=0)]
Так что я не пытаюсь заставить его вернуть новый экземпляр Foo
, но на самом деле точно такой же экземпляр, как new_foo
.