引用者、引用者链的示例

2024-06-17 04:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

进一步处理Dill package。昨天发布了一些ignorance of referents, referrers, inheritance and containers示例。答案很有见地,但是我还是很难想出一些例子来展示引用者和被引用者链的深度。在

昨天我在想一个instance对它的类来说是referrer。在Dill文档中,引用者,因此在这种情况下,depth=2将是孙子,对吗?这会是一个object,它是指另一个object,它是指另一个object的另一个{}?在

如果一个对象的引用referer的链至少有两个深度,那么这个对象的例子是什么?在

考虑:

 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)

退货:

^{pr2}$

具体地看一下这里的list对象,great_grand_parent的单个referent(父对象)是字符串“Henrietta古人”。在

referer(Children)(按指定的对象类型过滤的gc.get_referrers()的结果)包含两个对象:一个list,它包含字符串“Henrietta-angiol-One”,和stringHenrietta-agiot-One。(depth=2和depth=1返回相同的结果。)

如何制作Dill可以返回的对象:

  1. 两种不同深度的参考者
  2. 两种不同深度的指称

Tags: 对象objectelementonelistclassparentprint
1条回答
网友
1楼 · 发布于 2024-06-17 04:28:11

下面是一个孩子和家长的例子,如果你不熟悉python是如何构建类实例的话,一开始可能会有点惊讶。。。在

我们构造一个类,并尝试从类的实例中获取方法foobar。在

>>> class Dummy(object):
...   def foobar(self, x):
...     return x**2 + 1
... 
>>> me = Dummy()
>>> import types
>>> dill.detect.parents(me, types.MethodType, depth=2)
[<__main__.Dummy object at 0x105173890>]
>>> dill.detect.parents(me, types.FunctionType, depth=2)
[<__main__.Dummy object at 0x105173890>]

它似乎不起作用……但实际上,这是由于python如何构建类实例。事实证明,类实例指向类。。。但是从那里,类实例利用类__dict__来查找任何类方法或属性。因此,任何包含的方法或函数都位于depth=3(而不是depth=2)。在

^{pr2}$

现在,换一种方式非常符合您所考虑的使用类继承的思想。在

>>> class Dummy2(Dummy): 
...   pass
... 
>>> alsome = Dummy2()
>>> dill.detect.children(Dummy, type(alsome), depth=2)
[<__main__.Dummy2 object at 0x105d6d390>, <class '__main__.Dummy2'>, <class '__main__.Dummy'>]

相关问题 更多 >