给定一个python对象,我们如何获得该对象具有直接句柄/引用的所有内容的完整列表?

时间:2018-08-07 03:35:42

标签: python python-3.x python-2.7 getattr getattribute

假设我们得到了一个python对象。我们不知道它的来源或包含的内容。通过在对象上调用各种函数,我们如何才能为对象引用的数据找出明确的名称列表?

我只对可通过python API访问的数据感兴趣。如果一个对象有一些低级的内存缓冲区,而在python中没有相应的接口,那么我就不需要访问它;但是我要做想知道如何访问对象拥有的每个 python接口。

我的问题类似于询问我们如何获取所有python对象属性的列表。但是,有一些警告。

我不希望任何重载的__getattribute__(点运算符)方法成为障碍。我们可以通过调用object.__getattribute__(obj, 'x')来绕过任何重载的点运算符。但是,对object.__getattribute__的调用要求我们已经可以访问我们关心的属性的名称。对于我所设想的用法,我们不知道对象来自何处或它的属性名称可能是什么。我们根本不知道将哪些字符串传递到obj.__getattribute__

python的dir()方法是朝着正确方向迈出的一步,但这并不是我们所要寻找的。 dir将返回类方法。但是,python对象没有对类方法的直接引用。通常,该对象将具有对其实例化的类的引用(通过__bases__)。然后,该类实际上是对方法的引用。类方法是类的属性,而不是实例/对象的属性。因此,dir(obj)返回的内容不是obj直接拥有的。另一种查看方式是,我正在寻找单层访问,而不是多层访问。如果python对象(字典键)指向另一个字典,又指向另一个字典,依此类推,我只想访问名称/标签所引用的第一个字典。 dir可以获取对象没有直接指向的事物的名称。

起初,我认为每个python对象都有一个' dict '属性,而' dict '是该对象封装的所有名称的确定列表。但是,事实并非如此。另外,vars(obj)是不可接受的,因为它将对许多python对象(包括某些内置类的实例)抛出错误。我正在寻找一种可以告诉我们一些python对象的解决方案;对于某些人不起作用,而对其他人提出例外。

0 个答案:

没有答案