从对象属性获取值在单独的文件中

问题描述 投票:0回答:1

我试图从我在单独的python文件中创建的对象访问属性。

我试过以下代码:

print(self.GENOME[0][0].x)

其中self.GENOME[0][0]是对象的内存地址。

但是,我明白了

AttributeError:'set'对象没有属性'x'

阿根廷.朋友:

 import neuron

 #Creates an array of custom shape (3,4,3) and assigns unique object 
 #address

 for ii in range(len(_Topology)):
      _Genome[ii] = [{neuron.Neuron()} for i in range(_Topology[ii]+1)]

 #Calls object variable
 print(self.GENOME[0][0].x)

neuron.朋友:

class Neuron:

    def __init__(self):
        self.x = 50
python memory attributes memory-address
1个回答
0
投票

_Genome[ii]包含一个列表,其中至少包含一组Neuron实例。简化,你可以这样做:

>>> a = [{Neuron()} for _ in [1,2]]
>>> a
[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]
>>> q = [a]
>>> q
[[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]]
>>>

如果你打印_Genome,它看起来就像那样 - 我假设_Genome是列表般的|上面的q应该类似于_Genome

索引到它看起来像这样

>>> q[0]
[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]
>>> type(q[0])
<class 'list'>
>>> q[0][0]
{<__main__.Neuron object at 0x0000000002CAFF28>}
>>> type(q[0][0])
<class 'set'>
>>> 

设置行为是well documented - 就像大多数Python一样。

访问集合内容的一种方法是使用for循环

>>> for thing in q[0][0]:
    print(thing.x)
50
>>> 

访问集合内容的另一种方法是使用pop()方法,但这将从集合中删除任意项目。我不认为你真的想要这个 - 你不能控制你得到的项目,如果有多个项目,原始集合少一项。

>>> x = [[{Neuron()},{Neuron}]]
>>> t = x[0][0].pop()
>>> t
<__main__.Neuron object at 0x0000000002C2F2E8>
>>> t.x
50
>>> x
[[set(), {<class '__main__.Neuron'>}]]
>>>

您还可以从集合中创建列表并使用索引来访问列表的内容。

>>> q
[[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]]
>>> z = list(q[0][0])
>>> z
[<__main__.Neuron object at 0x0000000002CAFF28>]
>>> z[0].x
50
>>>

所有这些看起来都过于复杂,你可能最好改变你包含Neuron实例的方式。我不知道这对你是否可行。只需省去包含单个实例的集合:

>>> a = [Neuron() for _ in [1,2]]
>>> a
[<__main__.Neuron object at 0x0000000002C2FDD8>, <__main__.Neuron object at 0x0000000002CD00B8>]
>>> q = [a]
>>> q[0][0]
<__main__.Neuron object at 0x0000000002C2FDD8>
>>> type(q[0][0])
<class '__main__.Neuron'>
>>> q[0][0].x
50
>>>
© www.soinside.com 2019 - 2024. All rights reserved.