Вы можете использовать публичный наблюдаемый список для хранения общедоступных данных или просто создать общедоступный метод настройки для хранения данных и получения из соответствующего контроллера
То, что вы, вероятно, хотите, это dir()
.
Уловка состоит в том, что классы могут переопределять специальный метод __dir__
, что приводит к тому, что dir()
возвращает класс хочет (хотя им рекомендуется возвращать точный список, это не применяется). Кроме того, некоторые объекты могут реализовать динамические атрибуты, переопределяя __getattr__
, могут быть прокси-объекты RPC или могут быть экземплярами классов C-расширения. Если ваш объект является одним из этих примеров, у них может не быть __dict__
или возможность предоставить полный список атрибутов через __dir__
: у многих из этих объектов может быть так много динамических атрибутов, которые он делает 't фактически не знает того, что имеет, пока вы не попытаетесь получить к нему доступ.
В коротком пробеге, если dir()
недостаточно, вы можете написать функцию, которая пересекает __dict__
для объекта, а затем __dict__
для всех классов в obj.__class__.__mro__
; хотя это будет работать только для обычных объектов python. В конечном итоге вам, возможно, придется использовать утиную формулировку + предположения - если это похоже на утку, скрестите пальцы и надейтесь, что она имеет .feathers
.
attrs = dir(obj)
сохранит массив атрибутов в виде строк в attrs
. Затем для доступа к ним вы всегда можете использовать getattr(obj, attrs[i])
для получения атрибута i
th в массиве attrs
.
– Nick Merrill
27 June 2014 в 02:57
Я использую __dict__
Пример:
class MyObj(object):
def __init__(self):
self.name = 'Chuck Norris'
self.phone = '+6661'
obj = MyObj()
print(obj.__dict__)
# Output:
# {'phone': '+6661', 'name': 'Chuck Norris'}
__dict__
- иначе он мог бы использовать vars
– strubbly
8 September 2016 в 14:23
dir()
часто обрабатывается, чтобы показать интересные i> атрибуты, а не строго все; например, он не отображает атрибуты, унаследованные через метакласс, или он может быть переопределен методом__dir__
. – SingleNegationElimination 31 July 2011 в 00:11func_defaults
. – fluffy 18 August 2015 в 07:24