Как я могу объявить свой класс, чтобы я мог получить доступ, как это - PullRequest
2 голосов
/ 29 марта 2019

В micropython есть модуль neopixel для взаимодействия с адресуемыми светодиодами ws2812, пример кода:

from microbit import *
import neopixel

pixel = neopixel.NeoPixel(pin0, 64)

pixel[0] = (255, 0, 0)
pixel.show()

Это объявляет 64 светодиода, управляемых pin0, устанавливает первый на красный и обновляет светодиодный массив.

Как объявить класс, чтобы я мог просто присваивать значения, такие как строка pixel[0] = (255, 0, 0)?

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Хотя __setitem__ правильно, добавление геттера и сеттера довольно часто повторяется в кодировании.

Я бы лично порекомендовал использовать attr: http://www.attrs.org/en/stable/examples.html

Это дает массу магии, иСеттер включены в функциональные возможности.

После pip install attrs

import attr
@attr.s
class dummy():
    x= attr.ib()
test = dummy ([0])
test.x[0] = 2
test
2 голосов
/ 29 марта 2019

Вашему классу необходимо реализовать метод __setitem__.

Из документации :

object .__ getitem __ (self, key)

Вызывается для осуществления оценки себя [ключ].Для типов последовательностей принятыми ключами должны быть целые числа и объекты среза.Обратите внимание, что специальная интерпретация отрицательных индексов (если класс желает эмулировать тип последовательности) зависит от метода __getitem __ ().Если ключ имеет неподходящий тип, TypeError может быть вызван;если значение выходит за пределы набора индексов для последовательности (после какой-либо специальной интерпретации отрицательных значений), следует вызвать IndexError.Для типов отображения, если ключ отсутствует (не в контейнере), KeyError должен быть повышен.

Примечание: для циклов ожидайте, что IndexError будет вызван для недопустимых индексов, чтобы обеспечить надлежащее обнаружение конца последовательности.

object .__ setitem __ (self, key, value)

Вызывается для назначения присваивания self [key].То же примечание, что и для __getitem __ ().Это должно быть реализовано только для отображений, если объекты поддерживают изменения значений для ключей, или если новые ключи могут быть добавлены, или для последовательностей, если элементы могут быть заменены.Для неправильных значений ключа должны возникать те же исключения, что и для метода __getitem __ ().

...