关于python:如何获取对象的所有字段?

How to obtain all fields of an object?

免责声明:我正在用Python做我的第一步,这就是为什么这个问题听起来有点愚蠢。

如何列出存储在self中的所有变量?


您可能需要inspect.getmembers,因为它将列出对象的成员,即使这些对象的__slots__定义为这些对象没有__dict__

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> import inspect
>>> class F:
...     def __init__(self):
...             self.x = 2
...
>>> inspect.getmembers(F())
[('__doc__', None), ('__init__', <bound method F.__init__ of <__main__.F instance at 0xb7527fec>>), ('__module__', '__main__'), ('x', 2)]
>>> class F:
...     __slots__ = ('x')
...     def __init__(self):
...             self.x = 2
...
>>> inspect.getmembers(F())
[('__doc__', None), ('__init__', <bound method F.__init__ of <__main__.F instance at 0xb72d3b0c>>), ('__module__', '__main__'), ('__slots__', 'x'), ('x', 2)]

如果你是一个初学者,你会问一个简单的问题,所以这里有一个简单的答案:通过命令dir,你可以看到一个类或对象的所有内容,不仅仅是变量,还有方法和其他内容。当您在python提示下四处搜索时,这很好。尝试

1
2
3
4
dir("hello")  # examine string object
dir(str)      # examine string class
import os    
dir(os)       # Examine module

是的,从类内部可以使用它来检查self,因为self只是一个类对象。你可以在一个类的内容上使用dirtypehelp来获得更多关于它们的详细信息:DRR(OS.STDUT)


每个python对象都有一个名为__dict__的特殊成员,它是一个包含实例所有成员的字典。

self.__dict__.keys()列出了他们的名字

self.__dict__['foo']允许您访问成员foo的价值。

顺便说一句,基本上,写一些像self.foo = 1这样的东西与写self.__dict__['foo'] = 1一样有效(在事物的基本层面上)。