如何创建一个命名元组的__repr__?

时间:2018-12-23 00:35:58

标签: python python-3.x namedtuple repr

如何创建一种可以在其中打印的特殊方法__repr__,例如'6 of spades''Q of diamonds'

如何记住namedtuple中有listnamedtuple中的self._cards个来自import collections cards = collections.namedtuple('Card', ['rank', 'suit']) class Deck: ranks = [str(n) for n in range (2,11)] + list('JQKA') suits = 'spades diamonds hearts clubs'.split() def __init__(self): self._cards = [cards(rank, suit) for suit in self.suits for rank in self.ranks] def __len__(self): return len(self._cards) def __getitem__(self, item): return self._cards[item] def __repr__(self): return '%s of %s' % () # <-- don't know how to assign the string b = () for i in b: print(i) 的数据?

import torch
A = torch.rand((3,5,500))
first_three_rows = A[:, :3, :]

3 个答案:

答案 0 :(得分:4)

您可以改用typing.NamedTuple,这样可以正常定义方法:

from typing import NamedTuple

class Card(NamedTuple):
    rank: str
    suit: str
    def __repr__(self):
        return "{} of {}".format(self.rank, self.suit)

答案 1 :(得分:2)

cards重命名为Card会更清楚,因为这是您为该类分配的名称:

Card = collections.namedtuple('Card', ['rank', 'suit'])

您可以像扩展任何其他类一样扩展namedtuple,包括为其提供一种__repr__方法。您甚至可以重用类名,因为class语句是一种赋值类型:

class Card(Card):
    def __repr__(self):
        return f'{self.rank} of {self.suit}'

一个更紧凑的版本是

class Card(collections.namedtuple('Card', ['rank', 'suit'])):
    def __repr__(self):
        return f'{self.rank} of {self.suit}'

答案 2 :(得分:1)

现在看来,您的问题是您正在尝试在simplify(eval(expr2-expr1, [x1=I, x2=1, y1=0, y2=1, z1=0, z2=1])); (1/2) (1/2) -I 2 3 类中使用__repr__方法。仅当您尝试打印Deck对象时才会调用该方法,但是似乎您正在尝试为单个Card打印消息。您可以通过创建一个简单的Deck类并将其作为类变量来作为解决方案,并将Card对象的列表存储在平台中。这样,您可以为卡类本身编写一个Card方法,并直接引用卡的衣服和等级。