如何获取对象的所有字段?

时间:2012-03-11 12:43:42

标签: python

免责声明:我在python中迈出了第一步,这就是为什么这个问题可能听起来有些愚蠢。

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

3 个答案:

答案 0 :(得分:5)

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

>>> 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)]

答案 1 :(得分:2)

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

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

self.__dict__['foo']可让您访问成员foo

的值 顺便说一句,基本上,写self.foo = 1之类的东西(在基本层面上)与写self.__dict__['foo'] = 1同样有效。

答案 2 :(得分:2)

如果你是初学者,你会问一个简单的问题,所以这里有一个简单的答案:你可以看到一个类或对象的所有内容,不仅仅是变量,还有方法和其他内容,使用命令dir。当你在python提示符处闲逛时,这很棒。试试

dir("hello")  # examine string object
dir(str)      # examine string class
import os     
dir(os)       # Examine module

是的,从类中可以使用它来检查self,因为self只是一个类对象。您可以对类的内容使用dirtypehelp来获取有关它们的更多详细信息:     dir(os.stdout)