所以我创建了这个类,当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作为字符串的数字。我做错了什么?
答案 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}}。