从 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])
我正在尝试从包含 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])