str.format()问题

时间:2009-12-24 18:48:02

标签: python

所以我创建了这个类,当x = 0时输出'{0}',或者为x的每个其他值输出'{1}'。

class offset(str):  
    def __init__(self,x):  
        self.x=x  
    def__repr__(self):
        return repr(str({int(bool(self.x))}))
    def end(self,end_of_loop):
    #ignore this def it works fine
        if self.x==end_of_loop:
            return '{2}'
        else:
            return self

我想这样做:
offset(1).format('first', 'next')
但它只返回我给x作为字符串的数字。我做错了什么?

1 个答案:

答案 0 :(得分:4)

您的str的子类未覆盖format,因此当您在其中一个实例上调用format时,它只使用从str继承的self使用str 1}}的“内在价值为offset()”,即您传递给__new__的字符串形式。

要更改内在值,您可以覆盖class offset(str): def __init__(self, x): self.x = x def __new__(cls, x): return str.__new__(cls, '{' + str(int(bool(x))) + '}') for i in (0, 1): x = offset(i) print x print repr(x) print x.format('first', 'next') ,例如:

{0}
'{0}'
first
{1}
'{1}'
next

发射

__repr__

请注意,如果通过覆盖__new__,您已经确保实例的内在值str是您想要的格式,则无需覆盖{{1}}。