如果我有以下代码
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)
答案 0 :(得分:5)
你的问题不清楚。如果您的意思是您处于变量contained_object
和scope
存在的上下文中,并且contained_object
拥有一个具有属性scope
的对象,那么当然是你可以。
如果您的意思是只有One
类型的对象,并且想要找到对它的引用,则可以使用gc.get_referrers
(http://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列表。
您需要更具体地描述您的问题以获得更好的答案。