鉴于以下内容:
class MyClass:
def __init__(self, someval):
self.someval = someval
def get_a_function(self):
def result():
return self.someval
return result
inst = MyClass("my value")
func = inst.get_a_function()
我只有func
,并希望获得inst
。这有可能,如果是的话,怎么样?注意:我不控制MyClass
或如何声明inst
。
P.S。我知道这是baaadddd风格,但我很好奇是否可以做到。
答案 0 :(得分:3)
您注意到结果如何返回self.someval
,这意味着它有一个闭包。您需要做的就是深入了解关闭。为此,请使用func_closure
属性:
>>> class MyClass:
... def __init__(self, someval):
... self.someval = someval
... def get_a_function(self):
... def result():
... return self.someval
... return result
...
>>> inst = MyClass("my value")
>>> func = inst.get_a_function()
>>> func
<function result at 0x8d3efb4>
>>> func.func_closure
(<cell at 0x8dbc554: instance object at 0x8d321cc>,)
>>> func.func_closure[0].cell_contents
<__main__.MyClass instance at 0x8d321cc>
请注意,我只是访问闭包的第一个元素。如果函数更复杂,它的闭包可能有多个对象,你需要测试你想要的那个。
编辑:这是非常糟糕的风格btw:)