从instance.stack()访问实例对象属性

时间:2015-10-06 11:06:51

标签: python

我试图做一些非常丑陋的事并需要帮助。 从某种方法来说,我试图分析堆栈并确定哪个类称为此方法,如here所述。 但我想更进一步,更新调用我的方法的类实例的一些属性。

示例:

class A(object):
    self.a

    def some_func():
        analyze()

def analyze():
    frm = inspect.stack()[1]
    obj = find_obj_of_frm_by_magic(frm)
    obj.a = 1

1 个答案:

答案 0 :(得分:1)

我没有使用你的" find_obj_of_frm_by_magic"我假设的方法是你链接的帖子中的逻辑。我尝试这样做,但是我明确地使用了这个类,我能够修改实例,执行以下操作。

我使用setattr方法向类添加属性。唯一的区别是我明确地使用了这个类。

class A(object):
    a = ""

    def some_func(self):
        analyze()

def analyze():
    frm = inspect.stack()[1]
    setattr(frm[0].f_globals.get('A'), 'stuff', 'boo')

a = A()
a.some_func()
# will output boo
print(a.stuff)