重载字符串方法

2024-04-24 15:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想重载string方法s.t.得到以下输出:

print Class_name({6:7, 4:5, 7:7}) 
7*x^7 + 7*x^6 + 5*x^4

我做了以下事情:

^{pr2}$

为什么这样不行? 套房 print Class_name({6:7, 4:5, 7:7}),我得到

{4: 13, 6: 14, 7: 7}

谢谢你的帮助!在

编辑: 如果我有额外的定义:

def __add__(self, other):
    out = self.dictionary
    for k,v in sorted(other.dictionary.iteritems(), reverse=True):
        try:
            out[k] += v
        except:
            out[k] = v

    return out

我想这样做:

print Class_name({6:7, 4:5, 7:7})+Class_name({6:7, 4:5, 7:7})

我得到: {6:14, 4:10, 7:14}而不是所需的表示。在


Tags: 方法nameself编辑stringdictionary定义def
3条回答

您需要为类定义__repr__函数

class Poly():
    def __init__(self, coeffs):
        values = [(factor, power) for power, factor in coeffs.items()]
        self.poly = sorted(values, reverse = True)

    def __repr__(self):
        return ' + '.join('{}*x^{}'.format(f, p) for f, p in self.poly)

示例

^{pr2}$

对于附加工作:

def __add__(self, other):

    #...

    return Class_name(out)

这对我有用(从代码中剪切并粘贴,包装在类定义中)

class cn:

    def __init__(self, d):
        self.dictionary = d

    def __str__(self):
        self.poly = []
        for k,v in sorted(self.dictionary.iteritems()):
            if k == 0:
                self.poly.append(str(v))
            elif v == 1:
                self.poly.append('*x^'+str(k))
            else:
                self.poly.append(str(v)+'*x^'+str(k))
        out = ""
        for el in self.poly:
            out += str(el) + " + "
        self.out = out[:-2]
        return self.out


print cn({"1":"2"})


~ mgregory$ python foo.py
2*x^1 
~ mgregory$ python  version
Python 2.7.5
~ mgregory$ 

我想知道你是否真的没有定义你的类的__str__()也许你只是定义了一个名为__str__()的函数。。。在

相关问题 更多 >