Отказ от ответственности: Я делаю первые шаги на питоне, поэтому вопрос может звучать немного глупо.Как получить все поля объекта?
Как перечислить все переменные, которые хранятся в self
?
Отказ от ответственности: Я делаю первые шаги на питоне, поэтому вопрос может звучать немного глупо.Как получить все поля объекта?
Как перечислить все переменные, которые хранятся в self
?
Каждый объект python имеет специальный элемент, называемый __dict__
, который является словарем, содержащим все члены экземпляра.
self.__dict__.keys()
перечисляет их имена
self.__dict__['foo']
предоставляет доступ к значению элемента foo
BTW, в основном, писать что-то вроде self.foo = 1
эквивалентно (на базовом уровне вещей) писать self.__dict__['foo'] = 1
, который работает также.
Будьте предупреждены, что это упрощение. Объекты могут (и некоторые из них, по уважительным причинам) перегружать доступ к атрибутам, что делает '__dict__' либо неполным, либо полностью бесполезным. Чаще всего «свойство» используется для создания «атрибутов», которые не находятся в '__dict__' и молча называют функцию. Также есть '__slots__', который полностью удаляет' __dict__'. И я уверен, что есть больше исключений. – delnan
@ delnan true, но поскольку он спрашивал о самом базовом варианте использования, это хорошее приближение. –
Возможно, вам понадобится 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)]
Если вы новичок, вы задаете простой вопрос так вот простой ответ: Вы можете увидеть всех содержимого класса или объекта, а не только переменных, но и методы и другие с помощью команды 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)
Возможный дубликат http://stackoverflow.com/q/191010/776084. – RanRag