Когда я говорю «сохраненный», я в основном имею в виду атрибуты, а не элементы контейнера или значения, возвращаемые __getitem__
.
Моя первая мысль состояла в том, чтобы обойти любой перегруженный метод __getattribute__
(он же, точка-оператор)с object.__getattribute__
.Я думал, что тогда я получу объекты без словаря со словарем.Однако не все объекты имеют атрибут __dict__
, включая встроенный тип list
;Следующий код ...
lyst = list()
dct = object.__getattribute__(lyst, '__dict__')
... вызывает ошибку атрибута:
Traceback (most recent call last):
File "E:/python_playpen/playpen_object_dict.py", line 25, in <module>
dct = object.__getattribute__(sidgfisdgf, '__dict__')
AttributeError: 'list' object has no attribute '__dict__'
Process finished with exit code 1
Однако list
имеет метод dir
.Следующий код не выдает ошибку.
object.__getattribute__(lyst, '__dir__')()
object.__dir__(lyst)
Почти каждый ли объект Python имеет метод dir
?
dir
, кажется, возвращает методы класса, но я хочу ТОЛЬКО данные, принадлежащие объекту, а не данные, принадлежащие классу, из которого создается объект.
При условии, что следующее: obj = Klass () obj.foo()
обычно действительно:
obj = Klass()
Klass.foo(obj)
foo
- это данные в словаре Klass
, а не obj
s.Чтобы применить foo
к obj
, вы должны передать obj
в качестве ввода в метод foo Klass
.Затем Klass.foo
изменяет obj
на месте или, возможно, читает только из obj
.
Klass
предположительно доступен из obj
в два этапа:
- найдите ключ (также известный как строка)
__class__
в словаре obj
. - Найдите
foo
(или как там ни зовут метод) в ключах Klass
's словарь
Как получить только obj
словарные записи?Если одна из пар словаря (ключ, значение) внутри obj
является ссылкой на Klass
, это нормально, я просто не хочу, чтобы методы или переменные-члены класса хранились внутри Klass
.Мне нужны данные (и ключи), которые словарь obj
указывает на напрямую .Я бы назвал доступ к методу «in-direct», так как поиск в словаре obj
приводит нас к словарю klass
на нашем пути, чтобы найти цель нашего поиска (метод foo
).