python如何查看对象s的身份_如何获取Python对象父对象?

本文探讨了如何使用Python的`gc`模块来查找对象的引用,通过一个例子展示了如何找到`Foo`和`Bar`类实例之间的引用关系。在实验中,`find_parents`方法返回了引用`Bar`对象的父级,包括`Foo`实例和其他上下文信息。建议在初始化时直接传递父对象,以简化引用关系。请注意,垃圾回收器在处理双向链接时可能存在一些问题。
摘要由CSDN通过智能技术生成

(我知道这是一个老问题,但既然没有答案……)

你可以试着搞乱garbage collector。我们打算建议查看模块级对象,但是一些快速的代码实验给出了这个建议:尝试^{}函数。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>, 'val': 4}, ,

{'b': <__main__.bar object at>,

'Bar': ,

'f': <__main__.foo object at>, #

# the droids you're looking for

'__builtins__': ,

'__package__': None, 'gc': , '__name__': '__main__',

'Foo': , '__doc__': None

}]

对于加分,使用^{}来检查列表中是否有相同的b。

一些注意事项:我认为您应该只将父Foo对象传递给Bar,要么在init中,要么在另一个方法中。这就是我要做的,而不是我上面的建议。

This SO answer指出了垃圾收集器在双向链接时存在的一些问题-您目前没有这样做,但如果这样做了,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值