我正在将一个二进制文件读入到一个类实例的列表中。我有一个循环,从文件中读取数据到一个实例中。当实例被填充后,我将实例附加到一个列表中并重新开始读取。
这个方法很好用,但是其中一个实例元素是一个
有一些解决方法,比如不把
以下是一些代码:
这个结果正是我想要的,但所有的
这个方法很好用,但是其中一个实例元素是一个
Rect
(即矩形),它是一个用户定义的类型。即使使用deepcopy
,属性也会被覆盖。有一些解决方法,比如不把
Rect
作为用户定义的类型。然而,我可以看到这是一个我经常会遇到的情况,并希望有一个简单明了的解决方案,允许我在循环中读取嵌套类型。以下是一些代码:
class Rect:
def __init__(self):
self.L = 0
class groundtruthfile:
def __init__(self):
self.rect = Rect
self.ht = int
self.wt = int
self.text = ''
...
data = []
g = groundtruthfile()
f = open("datafile.dtf", "rb")
length = unpack('i', f.read(4))
for i in range(1,length[0]+1): #length is a tuple
g.rect.L = unpack('i',f.read(4))[0]
...
data.append(copy.deepcopy(g))
这个结果正是我想要的,但所有的
data(i).rect.L
都是最后读取的数据值。
Rect
实例(实际上是类,在groundtruthfile.__init__
中没有实例化一个实例,该实例应该被命名为GroundTruthFile
),你为什么希望有不同的行为呢?! - jonrsharpe