我有班级卡:
class Card:
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
self.value = VALUES[self.rank]
def __str__(self):
return f'{self.rank} of {self.suit} with value of {self.value}'
我正在创建一个list
:
ls = [Card('Nine','Diamonds'),Card('Ten','Diamonds'),Card('Eight','Diamonds')]
当我打印时:
print(ls[1:])
我得到:
[卡对象位于0x000001884AAF3400,卡对象位于0x000001884AB147B8]
如我所读,我应该实现:
def __getitem__:
但我不确定如何。
期望的输出是带有卡片对象的字符串表示形式的列表。
答案 0 :(得分:0)
好吧,如果您有一个Card对象列表并对其进行切片,您仍然会得到一个(也许较小的)Card对象列表。如果您在交互式Python提示符下,则可能输入了$scope.options = [{ 0 : [{Selected: false, val: "red"}, {Selected: true, val:"Black"}, {Selected: false, val:"Pink"}]}, { 1 : [{ Selected: false, val: "2" }, { Selected: true, val: "1" }]}];
$scope.choices = [];
for(var i = 0; i < Object.keys($scope.options).length; i++){
var keys = Object.keys($scope.options);
$scope.choices.push({ Id: keys[i], Value: $scope.options[i][keys[i]].find(function(x){ return x.Selected == true }).val });
}
之类的内容,并获得了这些[card object at ...,]之类的东西。这是因为当您在提示符下键入某些内容时-或者如果您执行my_list[1:7]
,Python会将其理解为print (something)
。如果它是一个字符串,它将只打印它,但是不是。由于定义了 str 方法,因此可以执行以下操作:
print( repr(something) )
这将为您提供更好的显示效果,每个列表项都可以通过slice = cards[1:7]
slice_strings = [ str(card) for card in slice ]
print (slice_strings)
方法转换为字符串。
您还可以定义自己的__str__()
方法-最好的方法是使其返回类似于__repr__()
对象构造函数的内容,例如:
Card
然后,进行def __repr__(self):
return f'Card({self.rank},{self.suit})'
会得到更令人满意的结果。