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

时间:2015-03-15 18:27:04

标签: python class save

我试图从包含类成员但不在类本身的数组中创建类属性的连接列表。

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

这使我能够创建四个类成员,比如L,R,U,D代表方向,数组是图像数组(openCV),dir_name是字母,即L.dir_name =' L& #39;,对于' R',' U',' D'。

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

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

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等,这样它们才有意义。我认为使用该类可以让我这样做,但我不确定如何从Arr_Seq中的元素中提取dir_name,或者如何使用该潜在字符串来适当地保存文件。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

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

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])