如何声明我的课程,以便我可以像这样访问

时间:2019-03-29 10:06:36

标签: python python-3.x micropython bbc-microbit

在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)行之类的值?

2 个答案:

答案 0 :(得分:2)

您的类需要实现__setitem__方法。

来自documentation

  

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