Каков эффект этого заявления python? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь изучить Kivy API, и меня очень смущают некоторые строки кода, которые я нашел в их примере multitexture . Кажется, одна строка кода присваивает значение «1» ключу «texture0» в «self.canvas», рассматривая «self.canvas», как будто это словарь python.

код self.canvas['texture0'] = 1

Однако, когда я перехожу за эту строку отладчик, я не вижу такой записи в self.canvas, а self.canvas имеет тип "RenderContext". На самом деле я не вижу ничего, что указывало бы на то, что оператор изменил что-либо наблюдаемое в отладчике, но если я оцениваю self.canvas['texture0'], он оценивается как «1».

enter image description here

Где хранится это значение? Я также не могу найти никаких подсказок в документах Kivy canvas

1 Ответ

1 голос
/ 14 февраля 2020

трактует "self.canvas" как словарь python.

Это не имеет ничего общего со словарями, использование нотации [] просто вызывает __getitem__ или __setitem__ - см. Python документы . Так получилось, что в этом случае класс хранит данные во внутреннем словаре, но это деталь реализации, а не то, что требуется этим синтаксисом.

Однако, когда я перехожу эту строку, отладчик, Я не вижу такой записи в self.canvas

Объекты canvas определены в cython, а внутренние атрибуты состояния, используемые для этого хранилища, не видны для кода Python.

...