Pio*_*ntk 0 python repr namedtuple python-3.x
如何创建一个特殊的方法__repr__,我可以打印,例如,'6 of spades'还是'Q of diamonds'?
如何访问从数据namedtuple,牢记我有一个list的namedtuple以s 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)
Mad*_*ist 10
如果您重命名cards为会更清楚Card,因为这是您分配给该类的名称:
Card = collections.namedtuple('Card', ['rank', 'suit'])
您可以namedtuple像任何其他类一样扩展 a ,包括为其提供__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}'
您可以typing.NamedTuple改用,这样可以正常定义方法:
from typing import NamedTuple
class Card(NamedTuple):
    rank: str
    suit: str
    def __repr__(self):
        return "{} of {}".format(self.rank, self.suit)
您现在的问题似乎是您正在尝试在类__repr__中创建该方法Deck。仅当您尝试打印Deck对象时才会调用该方法,但是看起来您正在尝试为单个卡片打印消息。您可以通过创建一个简单的类来解决这个问题,其中西装和等级作为类变量,并在牌组中Card存储对象列表。Card这样你就可以为__repr__卡牌类本身编写一个方法,并直接引用卡牌的花色和等级。
| 归档时间: | 
 | 
| 查看次数: | 310 次 | 
| 最近记录: |