атрибуты модели [дубликат]

Вы можете использовать публичный наблюдаемый список для хранения общедоступных данных или просто создать общедоступный метод настройки для хранения данных и получения из соответствующего контроллера

224
задан Mehrdad 31 July 2011 в 00:03
поделиться

3 ответа

Используйте встроенную функцию dir() .

306
ответ дан mouad 17 August 2018 в 21:35
поделиться
  • 1
    обратите внимание, что поведение dir() часто обрабатывается, чтобы показать интересные атрибуты, а не строго все; например, он не отображает атрибуты, унаследованные через метакласс, или он может быть переопределен методом __dir__. – SingleNegationElimination 31 July 2011 в 00:11
  • 2
    @TokenMacGuy: Это прекрасно для того, что мне нужно ... думать об этом слишком много, это может вызвать у меня головную боль. ;) – Mehrdad 31 July 2011 в 00:16
  • 3
    Он также не показывает свойств самоанализа, таких как func_defaults. – fluffy 18 August 2015 в 07:24
  • 4
    @mouad, почему я получаю это, хотя & gt; & gt; & gt; dir (pyrenderdoc) IronPython.Runtime.List? – Mona Jalal 30 December 2016 в 03:21

То, что вы, вероятно, хотите, это dir() .

Уловка состоит в том, что классы могут переопределять специальный метод __dir__, что приводит к тому, что dir() возвращает класс хочет (хотя им рекомендуется возвращать точный список, это не применяется). Кроме того, некоторые объекты могут реализовать динамические атрибуты, переопределяя __getattr__, могут быть прокси-объекты RPC или могут быть экземплярами классов C-расширения. Если ваш объект является одним из этих примеров, у них может не быть __dict__ или возможность предоставить полный список атрибутов через __dir__: у многих из этих объектов может быть так много динамических атрибутов, которые он делает 't фактически не знает того, что имеет, пока вы не попытаетесь получить к нему доступ.

В коротком пробеге, если dir() недостаточно, вы можете написать функцию, которая пересекает __dict__ для объекта, а затем __dict__ для всех классов в obj.__class__.__mro__; хотя это будет работать только для обычных объектов python. В конечном итоге вам, возможно, придется использовать утиную формулировку + предположения - если это похоже на утку, скрестите пальцы и надейтесь, что она имеет .feathers.

57
ответ дан Eli Collins 17 August 2018 в 21:35
поделиться
  • 1
    Что делать, если я хочу сохранить результаты, возвращаемые dir ()? – lucifer 26 March 2014 в 16:40
  • 2
    Не уверен, что это то, что вы ищете, но ... attrs = dir(obj) сохранит массив атрибутов в виде строк в attrs. Затем для доступа к ним вы всегда можете использовать getattr(obj, attrs[i]) для получения атрибута i th в массиве attrs. – Nick Merrill 27 June 2014 в 02:57
  • 3
    __dict__ эта функция действительно очень помогает мне. – Zhang LongQI 11 May 2016 в 08:43

Я использую __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'}
37
ответ дан Slipstream 17 August 2018 в 21:35
поделиться
  • 1
    OP специально упоминает, что его интересуют случаи, когда нет __dict__ - иначе он мог бы использовать vars – strubbly 8 September 2016 в 14:23
  • 2
    vars () близок к тому, что я хочу, но он не работает, если у объекта нет dict , что не всегда верно (например, это неверно для списка, dict и т. д. ). он ясно сказал, что НЕ то, что он хочет – legend-is-back 7 August 2017 в 09:58
Другие вопросы по тегам:

Похожие вопросы: