进一步使用Dill 包。昨天发布的例子说明了对参照物、参照物、继承和容器的一些无知。答案很有见地,但我仍然无法想出一些例子来显示引用者和引用者链中的几个层次的深度。
昨天我在想那instance
会是referrer
它的班级。在 Dill 文档中, children是referrers,所以在这种情况下,一个child ofdepth=2
将是一个孙子,对吧?那会是object
指(点)另一个object
指另一个的object
吗?
具有至少两个深度的引用链和引用链的对象的示例是什么?
考虑:
import dill
class GreatGrandparentClass(object):
"""A Great Grandparent class"""
name = "Henrietta Ancient One"
class GrandparentClass(GreatGrandparentClass):
"""A Grandparent class"""
class ParentClass(GrandparentClass):
"""A Grandparent class"""
great_grand_parent = ParentClass().name
print ("Children (depth=2):")
for element in dill.detect.children(
great_grand_parent,
list,
depth=2,
ignore=(globals())):
print(element)
print ("Parents:")
for element in dill.detect.parents(
great_grand_parent,
list,
depth=2,
ignore=(globals())):
print(element)
返回:
Children (depth=2):
['\npython pydill.py\n\n', 'dill', 'object', 'A Great Grandparent class', 'i', 'Henrietta Ancient One', 'GreatGrandparentClass', 'GreatGrandparentClass', 'A Grandparent class', 'GrandparentClass', 'GrandparentClass', 'A Grandparent class', 'ParentClass', 'great_grand_parent', 'ParentClass', 'i', 'Children (depth=2):', 'element', 'dill', 'detect', 'children', 'great_grand_parent', 'list', 'depth', 2, 'ignore', 'globals', 'element', 'Parents:', 'element', 'dill', 'detect', 'parents', 'great_grand_parent', 'list', 'depth', 2, 'ignore', 'globals', 'element']
Henrietta Ancient One
Parents:
Henrietta Ancient One
具体来看list
这里的对象,唯一的参考对象(父母)great_grand_parent
是字符串“Henrietta Ancient One”。
引用者(Children)(的结果,gc.get_referrers()
按指定对象类型过滤)包含两个对象:list
包含字符串“Henrietta Ancient One”的 A 和string
Henrietta Ancient One。(depth=2 和 depth=1 返回相同的结果。)
如何制作 Dill 可以返回的对象:
- 两种不同深度的推荐人
- 两种不同深度的参照物