2012-03-11 4 views
-1

Отказ от ответственности: Я делаю первые шаги на питоне, поэтому вопрос может звучать немного глупо.Как получить все поля объекта?

Как перечислить все переменные, которые хранятся в self?

+0

Возможный дубликат http://stackoverflow.com/q/191010/776084. – RanRag

ответ

1

Каждый объект python имеет специальный элемент, называемый __dict__, который является словарем, содержащим все члены экземпляра.

self.__dict__.keys() перечисляет их имена

self.__dict__['foo'] предоставляет доступ к значению элемента foo

BTW, в основном, писать что-то вроде self.foo = 1 эквивалентно (на базовом уровне вещей) писать self.__dict__['foo'] = 1, который работает также.

+1

Будьте предупреждены, что это упрощение. Объекты могут (и некоторые из них, по уважительным причинам) перегружать доступ к атрибутам, что делает '__dict__' либо неполным, либо полностью бесполезным. Чаще всего «свойство» используется для создания «атрибутов», которые не находятся в '__dict__' и молча называют функцию. Также есть '__slots__', который полностью удаляет' __dict__'. И я уверен, что есть больше исключений. – delnan

+0

@ delnan true, но поскольку он спрашивал о самом базовом варианте использования, это хорошее приближение. –

3

Возможно, вам понадобится 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

Если вы новичок, вы задаете простой вопрос так вот простой ответ: Вы можете увидеть всех содержимого класса или объекта, а не только переменных, но и методы и другие с помощью команды dir. Это здорово, когда вы заглядываете в подсказку python. Попробуйте

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

И да, внутри класса вы можете использовать его для изучения self, так как self только объект класса. Вы можете использовать dir, type и help на содержание класса, чтобы получить более подробную информацию о них: реж (os.stdout)

Смежные вопросы