我不知道如何访问另一个类对象中的类对象。给定一个“最佳结果”类,其中包括
- 一个整数值
- “颜色”类的数组
如下面的代码所示。我的问题是:
(A) 在 "Best Result" def "SetColors" 类中,如何将 self.colors 初始化为颜色大小?下面的代码似乎分配了空列表,所以当我将参数“colors”复制到“self.colors”时,它说“index out of range”。另外,深拷贝是正确的方法吗?
self.colors = list(colors)
for i in range(0, len(colors)):
self.colors[i]= copy.deepcopy(colors[i])
(B) 如何在“Best Result”类中设置和获取“Color”类的数组?
感谢您的评论,我尝试改进代码并在下面得到我的问题的答案。
import copy
class Color(object):
__elems__ = "num", "nodelist"
def __init__(self):
self.num = 0
self.nodelist = []
def items(self):
return [
(field_name, getattr(self, field_name))
for field_name in self.__elems__]
class BestResult(object):
__elems__ = "objfunc", "colors"
def __init__(self):
self.objfunc = 0
self.colors = []
def setObjFunc(self, value):
if value < self.objfunc:
self.objfunc = value
def getObjFunc(self):
return self.objfunc
def setColors(self, colors):
# Q1: How to initialize self.colors to size of colors? Index out of range now as self.colors has zero length.
self.colors = list(colors)
for i in range(0, len(colors)):
# Q2: Is this the right way to copy class?
self.colors[i]= copy.deepcopy(colors[i])
def getColors(self):
return self.colors
def funcA():
br = []
br.append(BestResult())
colors = []
colors.append(Color())
colors[0].num = 5
colors[0].nodelist = [10, 20 , 30 , 40, 50]
colors.append(Color())
colors[1].num = 2
colors[1].nodelist = [6, 7]
br[0].setObjFunc(-100)
# Q3: How to set colors[0] and colors[1] into br's colors?
br[0].setColors(colors)
print("br=%d" %br[0].getObjFunc())
# Q4 How to retrieve each elements of (num & nodelist) in br[0].colors
res = br[0].getColors()
print res[0].num
print res[0].nodelist
print res[1].num
print res[1].nodelist
if __name__ == '__main__':
funcA()