python反射找到引用对象

时间:2012-02-14 11:50:53

标签: python reflection

如果我有以下代码

 class One:
   scope = 'first_scope'

 class Two:
   scope = 'second_scope'
   contained_object = One()

我是否有可能通过引用来确定contained_object是否与引用它的对象具有相同的scope

由于

编辑:道歉,如果问题不清楚,我不太确定python术语如何提问。我设计了一种样本

一个例子可能是

 def sample(input):
     #code in here to find out if input.scope
     # matches a.scope without having a reference to it

 a = Two()
 a.scope = 'first scope'
 a.contained_object.scope = 'will not match'
 sample(a.contained_object)

2 个答案:

答案 0 :(得分:5)

你的问题不清楚。如果您的意思是您处于变量contained_objectscope存在的上下文中,并且contained_object拥有一个具有属性scope的对象,那么当然是你可以。

如果您的意思是只有One类型的对象,并且想要找到对它的引用,则可以使用gc.get_referrershttp://docs.python.org/library/gc.html#gc.get_referrers

答案 1 :(得分:2)

这是可行的,你可以这样做:

import gc

    class A(object):
        scope = 'a'

    class B(object):
        scope = 'b'
        contained = A()

    b = B()

    print gc.get_referrers(b.contained)[0]['scope']

然而,还有两个问题: 你为什么要在第一时间做这件事?我对此有一种非常不好的感觉,除非你有充分的理由,否则,我永远不会建议你去做。 2.当有多个引用时,你需要弄清楚如何选择正确的对象 - get_referrers()返回一个代表所有对象的dicts列表。

您需要更具体地描述您的问题以获得更好的答案。