从 python 中的非 class 数组中的对象中提取 class 属性

Extracting class attribute from objects in non class array in python

我正在尝试从包含 class 成员但不在 class 本身中的数组中创建 class 属性的串联列表。

class Direction:
def __init__(self, array, dir_name):
    self.array = array
    self.dir_name = dir_name

这使我能够创建四个 class 成员,比如 L、R、U、D 代表方向,数组是图像数组 (openCV),dir_name 是字母,即 L.dir_name = 'L',与 'R'、'U'、'D'.

相同

然后我使用自定义函数生成了一系列方向并将它们放入名为 Arr_Seq 的数组中,这只是一个数组,而不是 class 的成员。所以 Arr_Seq 包含一些随机的 LRUD 方向序列,它们是具有两个属性

的 class 对象

我想使用适当的文件名保存这些序列,因此我需要生成一个字符串来表示生成的序列。

ns = 10
ArrSequence = [0]*ns

for i in range(ns):
    Arr_Seq = get_arrow_seq(6)
    if i<2:  
        ArrSequence[i] = np.hstack(Arr_Seq)  
    elif np.hstack(Arr_Seq) not in [ArrSequence]:
        ArrSequence[i] = np.hstack(Arr_Seq)  
    else:
        i = i-1    
    cv2.imwrite('ArrSeq_' + str(i) + '.png', ArrSequence[i])

上面的代码生成了我的图像序列,但将它们保存为 ArrSeq_0、ArrSeq_1 等...没有用,因为我无法通过这种方式识别哪个文件。我希望能够将文件保存为 LLRUD、RRUDL 等,这样它们才有意义。我认为使用 class 可以让我做到这一点,但我不确定如何从 Arr_Seq 中的元素中提取 dir_name,或者如何使用该潜在字符串来保存适当归档。

感谢任何帮助!

我通过将每个方向分配给 class 然后使用适当的标识符来调用所需的部分来解决这个问题。

class Direction:
def __init__(self, array, dir_name):
    self.array = array
    self.dir_name = dir_name      

L = Direction(L, 'L')
R = Direction(R, 'R')
U = Direction(U, 'U')
D = Direction(D, 'D')

Arrow_Array = [L.array, R.array, U.array, D.array]

然后使用一组(很可能是低效的)if 语句来生成描述序列的字母:

num_seq = 2910
ArrSequence = [0]*num_seq

for i in range(num_seq):
    name = []    
    Arr_Seq = get_arrow_seq(6)
    for i in range(len(Arr_Seq)):     
        if (Arr_Seq[i] == L.array).all():
            name.append('L')
        elif (Arr_Seq[i] == R.array).all():
            name.append('R')
        elif (Arr_Seq[i] == U.array).all():
            name.append('U') 
        elif (Arr_Seq[i] == D.array).all():
            name.append('D')
        else:
            name.append(0)
    if i<2:  
        ArrSequence[i] = np.hstack(Arr_Seq) 

    elif np.hstack(Arr_Seq) not in [ArrSequence]:
        ArrSequence[i] = np.hstack(Arr_Seq)  

    else:
        i = i-1   

    cv2.imwrite(''.join(name) + '.png', ArrSequence[i])