OOP基础知识:如何定义Python类来创建对象实例数组?

2024-06-25 23:13:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组显示板,我想将其视为一个逻辑显示器。 每个显示器有4位数字。library I'm using为每个显示板创建一个对象实例。按原样使用库,我最终得到了三块板的三个实例:

display0 = segments_gpio.Seg14x8(i2c,0) 
display1 = segments_gpio.Seg14x8(i2c,1) 
display2 = segments_gpio.Seg14x8(i2c,2)

要写入这些板,我可以使用如下代码:

display0[0] = '0'
display0[1] = '1'
display0[3] = '2'
display1[0] = 'A'
display1[1] = 'B'
display1[3] = 'C'

这可以很好地编译和运行,但有明显的局限性。我正在尝试创建一个多显示类,它允许我编写如下代码

char = 65 # 'A'
for disp in range(0,3):
    for digit in range(0,4):
        displays[disp][digit] = char
        char += 1

或者,更好的是:

char = 65    # sequence from letter 'A'
for digit in range(0,12):
    displays[digit] = char
    char += 1

我试着像这样创建multidisplay类:

class mdisplay(segments_gpio.Seg14x8(i2c)):
    
    displayset = []
    def __init__():
        for x in range(0,3):
            print ("create display ",x)
            # instantiate display and append to displayset
            displayset.append(segments_gpio.Seg14x8(i2c,x)) 

目的是在displayset中创建一个显示对象数组

我将其实例化如下:

mydisplays = mdisplay(i2c)

像这样引用它

for z in range(0,3):
    mydisplays[z][0] = chr(z+48)
    mydisplays[z][1] = chr(z+65) 
    mydisplays[z][3] = chr(z+97)

这会在导入的库中产生错误,在我使用非对象方法访问显示时不会发生这些错误:

    self.disp_d0 = (dispID & 1) != 0
TypeError: unsupported operand type(s) for &: 'tuple' and 'int'

我怀疑我声明的类不正确,但我不确定在哪里

编辑2020-09-06-使用不同的方法继续前进。我并不真的需要一个新的类,但我只想能够处理多个显示和数字与变量,如列表或数组

我找到了this article,,它显示了如何创建对象实例列表: 以此为指导,我有以下工作代码:

display = []
display.append(segments_gpio.Seg14x8(i2c,0)) 
display.append(segments_gpio.Seg14x8(i2c,1))
display.append(segments_gpio.Seg14x8(i2c,2))   

charnum = 33
for boardindex in range(0,3):
    display[boardindex].fill(0)
    display[boardindex].brightness = .2
    for digitindex in range(0,8):
            display[boardindex][digitindex] = chr(charnum)
            charnum += 1;

从这里开始,下一个增强将是使显示器可寻址,使用单个索引表示3块板(每个板8位)组合显示器中的数字

        display[singledigitindex] = chr(charnum)

第一个索引值是进入显示列表的索引。第二个索引是Seg14x8类中显示对象实例的一部分。如何将它们结合起来


Tags: 对象实例inforgpiodisplayrangei2c