python - 如何获取 Python 对象父对象?

标签 python class object parent

因此,我正在尝试获取自定义对象“内部”的对象。这是一个例子。

假设 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/

相关文章:

java - 在java中将类类型保存为Type数据类型

javascript - 将 Object.setPrototypeOf 与 instanceof 一起使用

html - 如何将此表格和按钮放在图像旁边(图像右侧)

javascript - 如何替换窗口/iframe的文档对象

java - int[] 存储到 Java 中的对象中

python - 文件对象对比文件名

python - 我做了一个Python 'robber' s语言的翻译程序,是否正确?

python manage.py dumpdata 无法序列化数据库

python - 神秘的 IndexError - 非常基本的问题(Python)

java - Java中 'class'在哪里声明的?