我需要将数组的属性复制到我新创建的另一个数组中。这是我的代码段:
def mutation(self,ind):
fitnessvalues = ind.fitness.values # saving the attributes
G = Graph()
G.add_vertices(nbr_noeuds)
n = int(math.floor(1 + math.sqrt(1 + 8 * len(ind))/2))
c = 0
for i in range(nbr_noeuds-1):
for j in range(i+1, n):
if ind[c] == 1:
G.add_edge(i,j)
c += 1
for i in range(10):
G.rewire(n=3, mode="simple")
bin = array.array('b')
for i in range(n-1):
for j in range(i+1,n):
bin.append(int(G.are_connected(i, j)))
bin.fitness.values = fitnessvalues # Wrongly putting the saved attribute to the new array
return (bin,)
" bin.fitness.values = fitnessvalues"不是要走的路。那么如何在Python中为数组添加属性呢?
答案 0 :(得分:1)
在python(和其他面向对象语言)中,通常在类级别定义属性(属性的名称和行为,不一定是它的值),而不是每个实例。在python中,您可以有时将属性添加到要在类级别定义的对象,但是您不能使用内置类型(包括array.array
)来执行此操作。以defaultdict
为例,defaultdict
的所有实例都具有default_factory
属性。您可以通过简单地分配属性或使用setattr函数来设置属性。
from collections import defaultdict
d = defaultdict(int)
d.default_factory = float
setattr(d, "default_factory", complex)
您不能将新属性添加到defaultdict或大多数(可能是所有)内置python类型的实例。
d.new_attr = "some value"
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/Users/bagrata/<ipython-input-85-3fd77cc8678c> in <module>()
----> 1 d.new_attr = "blah"
AttributeError: 'collections.defaultdict' object has no attribute 'new_attr'
您可以创建内置类型的子类,并定义新属性:
class MyDefaultdict(defaultdict):
new_attr = None
d = MyDefaultdict(int)
d.new_attr = "some value"
您还可以向MyDeaultdict
的实例添加新属性,因为该类没有明确禁止它,但您绝对不应该这样做:
d.attribute_unique_to_this_instance = "some value"