猿问

Python 中自定义类的字符串格式

我IntegerMod为整数模一个素数编写了一个自定义类。一切正常。然后将它们用作用 构建的多项式的系数numpy.poly1d,并设法实现足够的方法,IntegerMod以便对这些多项式的操作按我的需要工作(例如,找到给定一堆点的插值多项式)。


只剩下一点细节,那就是print(pol)那些多项式实际上失败了,因为 Python 尝试对%g系数使用字符串格式,但未能说明IntegerMod应该是字符串还是数字。实际上IntegerMod继承自numbers.Number,但似乎还不够。我的问题是,我可以在我的班级中实现字符串格式的行为吗?如果没有,我应该如何处理这个问题?


产生错误的 MWE:


import numbers

import numpy as np



class IntegerMod(numbers.Number):

    def __init__(self, k, p):

        self.k = k % p

        self.p = p


    def __repr__(self):

        return "<%d (%d)>" % (self.k, self.p)


if __name__ == "__main__":

    p = 13

    coef1 = IntegerMod(2, p)

    coef2 = IntegerMod(4, p)

    print(coef1)  # Works as expected

    pol = np.poly1d([coef1, coef2])

    print(pol)

    """ # error:

        s = '%.4g' % q

        TypeError: float() argument must be a string or a number, not 'IntegerMod'

    """


牛魔王的故事
浏览 210回答 1
1回答

青春有我

也许您应该实现该__float__方法,因为 poly1d 格式需要浮点数。像这样的东西&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__float__(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;float(self.k)
随时随地看视频慕课网APP

相关分类

Python
我要回答