从单独文件中的对象属性获取值
Getting Value from Object Attribute in separate file
我正在尝试访问我在单独的 python 文件中创建的对象的属性。
我试过以下代码:
print(self.GENOME[0][0].x)
其中self.GENOME[0][0]
是对象内存地址。
但是,我得到
AttributeError: 'set' object has no attribute 'x'
agent.py:
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.py:
class Neuron:
def __init__(self):
self.x = 50
_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
是 list-like | 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
>>>
我正在尝试访问我在单独的 python 文件中创建的对象的属性。
我试过以下代码:
print(self.GENOME[0][0].x)
其中self.GENOME[0][0]
是对象内存地址。
但是,我得到
AttributeError: 'set' object has no attribute 'x'
agent.py:
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.py:
class Neuron:
def __init__(self):
self.x = 50
_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
是 list-like | 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
>>>