Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP基础知识:如何定义Python类来创建对象实例数组?_Python_Arrays_Oop - Fatal编程技术网

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

OOP基础知识:如何定义Python类来创建对象实例数组?,python,arrays,oop,Python,Arrays,Oop,我有一组显示板,我想将其视为一个逻辑显示器。 每个显示器有4位数字。为每个显示板创建一个对象实例。按原样使用库,我最终得到了三块板的三个实例: display0 = segments_gpio.Seg14x8(i2c,0) display1 = segments_gpio.Seg14x8(i2c,1) display2 = segments_gpio.Seg14x8(i2c,2) 要写入这些板,我可以使用如下代码: display0[0] = '0' display0[1] = '1' d

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

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'
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)) 
mydisplays = mdisplay(i2c)
这可以很好地编译和运行,但有明显的局限性。我正在尝试创建一个多显示类,它允许我编写如下代码

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类:

display0[0] = '0'
display0[1] = '1'
display0[3] = '2'
display1[0] = 'A'
display1[1] = 'B'
display1[3] = 'C'
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)) 
mydisplays = mdisplay(i2c)
目的是在displayset中创建一个显示对象数组

我将其实例化如下:

display0[0] = '0'
display0[1] = '1'
display0[3] = '2'
display1[0] = 'A'
display1[1] = 'B'
display1[3] = 'C'
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)) 
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-使用不同的方法继续前进。我并不真的需要一个新的类,但我只想能够处理多个显示和数字与变量,如列表或数组

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

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类中显示对象实例的一部分。如何将它们结合起来?

这是一个列表,而不是:
displayset=[]
我能够创建一个结构,其中我将显示引用为
display0[0]=“0”
我的目标是创建一个对象结构(列表或数组),可以引用为
display[0][0]='0'
类定义中使用的语法是什么?从对象的角度来看,它是一个一维列表。当考虑到每个对象都可以通过数字寻址时,它看起来更像一个数组。请参阅原始问题的编辑-我有一个实例列表,但我希望寻址包括实例对象的索引。这可能吗?
display[singledigitindex]=x
将覆盖该索引,而不会更新对象在该位置存储的任何信息,因此不确定这是您想要的