首页 > 解决方案 > 在 python 的 __format__ 方法中创建自定义格式说明符

问题描述

__format__()我通过覆盖我的类中的方法来实现我自己的格式说明符。现在我遇到的麻烦是我收到了以下错误。是因为我不能%s用于任何其他格式规范,str()还是我在这里做错了什么。

回溯(最近一次通话):文件“test.py”,第 66 行,打印中(“经销商有 {0:%r of %s}”.format(NumberCard(1, Club))) 文件“ch1.py ",第 24 行,格式 为 result = format_spec.replace("%r", self.rank).replace("%s", self.suit) TypeError: replace() argument 2 must be str, not int

class Card:

    insure = False

    def __init__(self, rank, suit):
        self.suit = suit
        self.rank = rank
        self.hard, self.soft = self._points()

    def __str__(self):
        return "{rank}{suit}".format(**self.__dict__)

    def __repr__(self):
        return "{__class__.__name__}(suit={suit!r}, rank={rank!r})".format(__class__=self.__class__, **self.__dict__)

    def __format__(self, format_spec):
        if format_spec == "":
            return str(self)
        else:
            result = format_spec.replace("%r", self.rank).replace("%s", self.suit)
            result = result.replace("%%", "%")
            return result

class NumberCard(Card):

    def _points(self):
        return int(self.rank), int(self.rank)


class Suit:

    def __init__(self, name, symbol):
        self.name = name
        self.symbol = symbol

我将我的论点传递为

print("Dealer has {0:%r of %s}".format(NumberCard(1, Suit('Club', '♣'))))

标签: python-3.xoop

解决方案


NumberCard(1, Suit('Club', '♣'))

所以,等级是一个整数

你在打电话replace("%r", self.rank)

错误说replace() argument 2 must be str, not int

str(self.rank)在替换中使用


推荐阅读