因此,我正在尝试获取自定义对象“内部”的对象。这是一个例子。
假设 o 是一个对象——不管是什么类型,它都可以存储变量。
o = Object()
class Test():
def __init__(self):
self.parent = o ## This is where I fall off; I want to be able to access
## the o object from within the Test object
o.test = Test()
那么,我如何从 Test 内部获取 o?我知道我可以编写测试函数以将其传递给
o.test = Test(o)
但我宁愿从类定义内部进行。
最佳答案
(我知道这是一个老问题,但因为它没有答案......)
你可以尝试弄乱 garbage collector .打算建议查看模块级对象,但一些快速代码实验给出了这个:尝试 gc.get_referrers(*objs)
功能。
import gc
class Foo(object):
"""contains Bar"""
def __init__(self, val):
self.val = val
self.bar = None
class Bar(object):
"""wants to find its parents"""
def __init__(self, something):
self.spam = something
def find_parents(self):
return gc.get_referrers(self)
结果并不简单,因此您必须应用自己的逻辑来确定哪个 f
是你要找的那个。注意 'f': <__main__.Foo object at ...>
下面:
>>> f = Foo(4)
>>> b = Bar('ham')
>>> f.bar = b
>>> b.find_parents()
[{'bar': <__main__.Bar object at 0x7f3ec5540f90>, 'val': 4}, <frame object at 0x238c200>,
{'b': <__main__.Bar object at 0x7f3ec5540f90>,
'Bar': <class '__main__.Bar'>,
'f': <__main__.Foo object at 0x7f3ec5540f10>, # <-- these might be
# the droids you're looking for
'__builtins__': <module '__builtin__' (built-in)>,
'__package__': None, 'gc': <module 'gc' (built-in)>, '__name__': '__main__',
'Foo': <class '__main__.Foo'>, '__doc__': None
}]
要获得奖励积分,请使用 gc.get_referents(*objs)
在那些检查是否相同b
在他们的列表中。
一些注意事项/注意事项:
- 我认为你应该将父 Foo 对象传递给 Bar,或者在
init
中。或另一种方法。这就是我会做的,而不是我上面的建议。 - This SO answer指出垃圾收集器在链接这两种方式时遇到的一些问题 - 你目前没有这样做,但如果你这样做了,仅供引用。
关于python - 如何获取 Python 对象父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575551/