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

时间:2019-02-01 12:45:35

标签: python oop string-formatting

我为模数以质数编码的自定义类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'
    """

1 个答案:

答案 0 :(得分:3)

也许您应该实现__float__方法,因为poly1d格式需要浮点数。

类似这样的东西

    def __float__(self):
        return float(self.k)