2
我試圖找到一種基本上使用代碼中不同位置的上下文來執行eval
的方法。舉個例子,我有一個類Friend
,它可以這樣使用:如何從代碼中的不同點訪問全局變量
>>> class A:
... friend = Friend('B')
...
>>> class B:
... friend = Friend('A')
...
>>> A.friend.getobject()
<class '__main__.B'>
然而,Friend
在代碼的其他地方定義,在一個單獨的圖書館,並會是這個樣子:
class Friend:
def __init__(self, objname):
self.objname = objname
def getobject(self):
return eval(self.objname, original_context)
sqlalchemy ORM具有類似的列定義模式,但它們通過跟蹤會話中所有擁有的類(即表)來實現它。如果需要,我可以做類似的事情,但我想知道是否有另一種方法可以做到這一點。我一直在尋找框架和解釋器堆棧,我想我可以使用像inspect.stack()[1][0].f_locals
之類的東西到達相關框架的本地人,但是我必須在定義該對象之前調用的Frame.__init__
中執行此操作。
我的問題是如何找到,但只在需要的時候。這歸結爲兩個問題: 1.如何訪問實例化Friend
的環境(或幀?)。 2.如何在getobject
被調用時訪問它。