在micropython中,有一个模块neopixel与ws2812可寻址LED交互,示例代码为
from microbit import *
import neopixel
pixel = neopixel.NeoPixel(pin0, 64)
pixel[0] = (255, 0, 0)
pixel.show()
这将声明由pin0控制的64个led,将第一个led设置为红色并更新led阵列。
我如何声明一个类,这样我才可以分配诸如pixel[0] = (255, 0, 0)
行之类的值?
答案 0 :(得分:2)
您的类需要实现__setitem__
方法。
object .__ getitem __(self,key)
呼吁实施评估 自我[密钥]。对于序列类型,可接受的键应为整数 和切片对象。注意负号的特殊解释 索引(如果类希望模拟序列类型)取决于 __getitem __()方法。如果键的类型不合适,则可能引发TypeError;如果该值超出索引集的范围 顺序(在对负值进行任何特殊解释之后), 应该引发IndexError。对于映射类型,如果缺少键(不是 在容器中),应该引发KeyError。
注意:for循环期望将为非法抛出IndexError。 索引以正确检测序列的结尾。
object .__ setitem __(自身,键,值)
被调用以实现对 自我[密钥]。与__getitem __()相同的注释。这应该只是 如果对象支持更改值,则为映射实现 用于键,或者是否可以添加新键,或者用于序列,如果元素 可以更换。对于不正确的密钥应提出相同的例外 __getitem __()方法的值。
答案 1 :(得分:2)
尽管__setitem__
是正确的,但在编码中经常会添加getter和setter。
我个人建议使用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