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

如何在Python类中传递符号属性?解决sympy的TypeError报错

问题分析与解决

错误原因

你代码里的核心问题有两个:

  1. sp.symbols("self.x") 不会读取实例的self.x属性,而是创建一个名为"self.x"的单个符号,同理sp.symbols("self.y")也是单个符号,两者相乘得到的是单个Mul对象,而sum()函数要求传入可迭代对象(比如列表、数组),直接对单个Mul对象调用sum就会抛出TypeError: 'Mul' object is not iterable。
  2. 你没有将传入的字符串数组(ax、by)里的每个元素转换为对应的sympy符号,也没有实现对应元素相乘后求和的逻辑。

修复后的代码

import sympy as sp
import numpy as np    
class Sym_Class:
    def __init__(self, x, y):
        # 将输入的字符串数组批量转换为sympy符号
        self.x_symbols = sp.symbols(x)
        self.y_symbols = sp.symbols(y)

    def sumsymbol(self):
        # 遍历对应符号对,计算乘积项后求和
        product_terms = [x * y for x, y in zip(self.x_symbols, self.y_symbols)]
        total_sum = sum(product_terms)
        print(total_sum)   
ax = np.array(['x1', 'x2', 'x3'])
by = np.array(['y1', 'y2', 'y3'])
cc1 = Sym_Class(ax, by)
cc1.sumsymbol()

代码说明

  • sp.symbols(x) 可以直接接收字符串数组(或列表),批量创建对应的sympy符号,比如传入['x1','x2','x3']会生成(x1, x2, x3)这三个符号组成的元组。
  • 用zip将两个符号序列配对,生成每个xi*yi的乘积项,再用sum()对这些乘积项求和,得到最终的符号表达式。

运行修复后的代码,会输出:x1*y1 + x2*y2 + x3*y3,符合你的需求。

内容的提问来源于stack exchange,提问作者Z. K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:03:22