我正在尝试从头开始制作神经网络。创建输入节点时,我想传入对变量的引用,因此每次变量(输入节点从中获取数据)发生变化时我都不必重置它。这是我现在拥有的简化版本:
Class values:
VList1 = [0, 5, 10, 15]
class source:
def __init__(self, value) -> None:
self.value = value
source0 = source(values.VList[1])
print (source0.value)
values.VList[1] = 25
print (source0.value)
这将打印出:
5
5
但是我希望它打印出来:
5
25
如果不手动更新 source0.value,有什么办法可以做到这一点吗?或者有没有办法在 source0 中 store 引用 values.VList[1]
?
回答1
当您在表达式中使用 values.VList[1]
时,它会被计算并返回对当前包含在该列表中的特定 int
的引用;它不会为您提供对列表中该位置的引用。
如果您想引用该列表位置,store 引用列表 values
和 source
中的索引 1
,以便您可以使用这些信息来查找当前的 value出现在列表中的该索引处。如果您希望能够方便地访问 source.value
,请使用 @property
:
class values:
VList = [0, 5, 10, 15]
class source:
def __init__(self, values, index) -> None:
self.values = values
self.index = index
@property
def value(self):
return self.values[self.index]
source0 = source(values.VList, 1)
print(source0.value) # 5
values.VList[1] = 25
print(source0.value) # 25
构建此代码的更好方法可能是使其成为可变对象列表(例如, @dataclass
这是创建主要目的是包含其他数据的类的最简单方法),以便您可以传递引用到单个对象:
from dataclasses import dataclass
@dataclass
class Source:
value: int
values = [Source(v) for v in (0, 5, 10, 15)]
source0 = values[1]
print(source0.value) # 5
values[1].value = 25
print(source0.value) # 25
在上面的代码中,values
是一个 Source
对象的列表,其中每个 stores 引用了一个 value
属性。 source0
指的是一个特定的 Source
,它也存储在 values
中;当您通过任一引用更改该对象的 value
时,更改通过另一个引用“可见”,因为两个 variables 都引用相同的 Source
对象,而不是不同的 int
values。
如果你这样做了:
value0 = values[1].value
那么 value0
将是一个特定的 int
,当原始 Source
更新时它不会更新。