为什么调用`str(someList)`有时会创建一个空格的“数组”?

时间:2015-11-03 03:44:29

标签: python string list concatenation

playerList包含两个Player个对象(str属性分别称为"a""b"),Player实现{{} 1}}和__str__。当我将__repr__连接到另一个字符串时,我希望该字符串可以附加str(playerList)形式的内容。而是由"[a, b]"附加结果字符串。我犯了什么错误给出了这个结果?

这是我写的

"[ , ]"

prompt = "And then choose the opponent you would like to attack from " + str(playerList)

stdout上的内容:

def __str__ (self):
    return self.name

def __repr__ (self):
    return str()

我想要的是什么:

"And then choose the opponent you would like to attack from [, ]"

1 个答案:

答案 0 :(得分:5)

您的__repr__方法返回一个空字符串:

def __repr__(self):
    return str()
没有参数的

str()是一个空字符串:

>>> str()
''

如果您想直接致电__str__,或将self传递给str()

return self.__str__()

return str(self)

请注意,将列表转换为字符串会将该列表中的所有字符串都包含为表示; repr(stringobject)的输出,它使用您在创建此类字符串时使用的相同表示法。列表['a', 'b']将使用该表示法转换为字符串:

>>> l = ['a', 'b']
>>> l
['a', 'b']
>>> str(l)
"['a', 'b']"
>>> print str(l)
['a', 'b']

如果你真的想要包含没有引号的字符串,那么你需要自己做格式化:

>>> '[{}]'.format(', '.join([str(elem) for elem in l]))
'[a, b]'
>>> print '[{}]'.format(', '.join([str(elem) for elem in l]))
[a, b]