python - 将值附加到对象内的数组(循环对象)
问题描述
这是这个问题的简洁版本。因为我改变了这么多,所以我提出了一个新问题
我试图从一个较长的数组中获取某些值solution
并将它们放入一个较小的数组中,在一个对象中。这段代码应该将数组的前半部分solution
放入x_hist
inside m1
,将数组的后半部分solution
放入x_hist
inside m2
。相反,它似乎采用了所有solution
数组并将其放入x_hist
两个对象中。有谁知道为什么会这样?我是否不小心对代码进行了矢量化?
class Mass:
x_hist = []
m1 = Mass()
m2 = Mass()
ms = [m1,m2]
solution = [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(len(ms)):
for k in range(int(len(sol)/len(ms))):
ms[i].x_hist.append(solution[k+8*i])
print(m1.x_hist)
print(m2.x_hist)
输出是:
[1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0]
我正在尝试获得以下输出:
[1, 2, 3, 4, 5, 6, 7, 8]
[0, 0, 0, 0, 0, 0, 0, 0]
解决方案
x_hist 属性是静态类属性
在类中声明的变量是与实例上下文不同的静态变量,这意味着,
>>> s = M()
>>> s
<__main__.M object at 0x7f9ffb4a6358>
>>> s.i
3
>>> M.i
3
>>> s.i = 4
>>> M.i
3
>>> s.i
4
class Mass:
#x_hist = [] shared by all classes its static
def __init__(self):
self.x_hist = []
m1 = Mass()
m2 = Mass()
ms = [m1,m2]
solution = [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(len(ms)):
for k in range(int(len(sol)/len(ms))):
ms[i].x_hist.append(solution[k+8*i])
print(m1.x_hist)
print(m2.x_hist)
对于静态方法和 ClassMethod 检查这里
有关课程的精彩教程,请参阅此处
推荐阅读
- c++ - 模板专业化无法在没有前向声明的情况下解析此上下文方法
- java - Hyperledger Indy 创建 RevocationRegistry 失败,由于 schema_ref 而导致 credDefId 格式错误
- google-chrome-extension - Vue Devtools 落后于应用程序事件
- odoo - 如何修改脚手架命令的文件和文件夹结构?
- c# - 如何在 C# 中将变量从一种形式导出/导入到另一种形式?
- c# - .NET 5.0 中的 Microsoft.VBE 参考不可用
- microsoft-graph-api - 仅限应用令牌 - Microsoft Graph - 首选语言
- node.js - Nodejs如何使用ajax发送经过身份验证的请求
- database-design - 将计算值用作聚合表中的维度是个坏主意吗?
- c++ - 在头文件中找不到“torch/torch.h”文件