You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OOP继承场景下子类solv的self.Y数组无法填充数据问题

Python OOP继承场景下子类属性赋值问题修复

存在的问题

  • 参数不匹配错误:fun方法定义了2个必传位置参数,但在__init__中调用时没有传入参数,直接触发参数缺失报错
  • 数组长度不匹配:初始化时self.Y是与self.t等长的全零数组,后续调用np.append追加等长的计算结果后,self.Y长度为self.t的2倍,绘图时会触发维度不一致报错
  • 冗余参数问题:fun方法中定义的t、Y参数全程未被使用,实际逻辑调用的是父类初始化生成的实例属性self.t,参数属于无效定义

修复后完整代码

import numpy as np
import matplotlib.pyplot as plt

class System():
  
  def __init__(self):
    h = 0.5
    self.t = np.linspace(0, 20+h, int(20/h))
    self.x = np.zeros(len(self.t))
    self.x[0] = 5000
    self.y = np.zeros(len(self.t))
    self.y[0] = 0
    self.loop()
  
  def dxdt(self, x, y, t):
    return -0.1*x
  
  def dydt(self, x, y, t):
    return -0.1*x-0.2*y
  
  def loop(self):
    h = 0.5
    for i in range(len(self.t)-1):
      k1 = h*self.dxdt(self.x[i], self.y[i], self.t[i])
      l1 = h*self.dydt(self.x[i], self.y[i], self.t[i])
      k2 = h*self.dxdt(self.x[i]+k1*h/2, self.y[i]+l1*h/2, self.t[i]+h/2)
      l2 = h*self.dydt(self.x[i]+k1*h/2, self.y[i]+l1*h/2, self.t[i]+h/2) 
      k3 = h*self.dxdt(self.x[i]+k2*h/2, self.y[i]+l2*h/2, self.t[i]+h/2)
      l3 = h*self.dydt(self.x[i]+k2*h/2, self.y[i]+l2*h/2, self.t[i]+h/2)
      k4 = h*self.dxdt(self.x[i]+k3*h, self.y[i]+l3*h, self.t[i]+h)
      l4 = h*self.dydt(self.x[i]+k3*h, self.y[i]+l3*h, self.t[i]+h)
      self.x[i+1] = self.x[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
      self.y[i+1] = self.y[i] + 1/6*(l1 + 2*l2 + 2*l3 + l4)
    
class solv(System):
  def __init__(self):
    super(solv, self).__init__()
    self.fun()
    
  def fun(self):
    # 直接将计算结果赋值给self.Y,长度与self.t完全匹配
    self.Y = 5000 - 0.5*self.t**2

  def dibu(self):
    plt.plot(self.t, self.Y, color='black')
    plt.show()

fn = solv()
fn.dibu()

修复说明

移除了fun方法的冗余参数,取消无意义的np.append操作,直接将计算得到的与self.t等长的数组赋值给self.Y,既符合将fun计算结果填充到self.Y的需求,也能正常完成绘图操作。

内容的提问来源于stack exchange,提问作者Fabian Zamora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:48:03