首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何获得存储在python对象中的所有东西(或几乎所有东西)的明确列表?

问我们如何获得存储在python对象中的所有东西(或几乎所有东西)的明确列表?
EN

Stack Overflow用户
提问于 2018-05-21 02:42:02
回答 1查看 56关注 0票数 1

当我说“存储”时,我主要是指属性,而不是__getitem__返回的容器元素或值。

我的第一个想法是使用__getattribute__绕过任何重载的object.__getattribute__方法(又名点运算符)。我想我会得到一个未被篡改的对象-字典。但是,并非所有对象都具有__dict__属性,包括内置的list类型;以下代码.

代码语言:javascript
复制
lyst  = list()
dct = object.__getattribute__(lyst, '__dict__')

..。引发属性错误:

代码语言:javascript
复制
Traceback (most recent call last):

  File "E:/python_playpen/playpen_object_dict.py", line 25, in <module>
    dct = object.__getattribute__(sidgfisdgf, '__dict__')
AttributeError: 'list' object has no attribute '__dict__'

Process finished with exit code 1

但是,list确实有一个dir方法。以下代码不会引发错误。

代码语言:javascript
复制
object.__getattribute__(lyst, '__dir__')()

object.__dir__(lyst)

几乎每个python对象都有一个dir方法吗?

dir似乎返回类方法,但我只希望只返回属于对象的数据,而不是属于对象实例化的类的数据。

给定以下条件: obj = Klass() obj.foo()

通常是:

代码语言:javascript
复制
obj = Klass()
Klass.foo(obj)

foo是Klass字典中的数据,而不是obj字典中的数据。为了将foo应用于obj,必须将obj作为输入传递到Klass的foo方法中。然后Klass.foo将obj就地修改,或者只从obj读取。

据推测,Klass可以通过两个步骤从obj访问:

  1. 在__class__的obj字典中查找键(又称字符串).
  2. 在foo字典的关键字中搜索Klass(或任何方法名称)。

我们如何只获得obj的字典条目?如果obj中的一个字典(键、值)对是对Klass的引用,这很好,我只是不希望存储在Klass中的方法或类成员变量。我想要obj字典直接指向的数据(和键),。我会将方法访问称为“直接访问”,因为obj的字典中的查找会带我们在途中找到搜索的目标klass's字典(方法foo)。

EN

回答 1

Stack Overflow用户

发布于 2018-05-21 03:11:15

这是完全邪恶的,不给名字,但. gc.get_referents()是相当接近。从医生那里:

gc.get_referents(*objs) 返回任何参数直接引用的对象列表。返回的引用是由参数的C级tp_traverse方法(如果有的话)访问的对象,并且可能不是所有实际可直接访问的对象。tp_traverse方法只受支持垃圾收集的对象的支持,并且只需要访问可能涉及循环的对象。因此,例如,如果可以从参数直接访问一个整数,则该整数对象可能出现在结果列表中,也可能不会出现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50441303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档