Я реализовывал свои собственные спецификаторы формата, переопределяя метод __format__()
в моем классе. Теперь проблема в том, что я получаю ошибку ниже. Это потому, что я не могу использовать %s
для любой другой спецификации формата, кроме str()
, или я здесь что-то не так делаю.
Traceback (последний вызов был последним):
Файл «test.py», строка 66, в
print («У дилера {0:% r% s}». формат (NumberCard (1, Club)))
Файл "ch1.py", строка 24, в формате
result = format_spec.replace ("% r", self.rank) .replace ("% s", self.suit)
TypeError: аргумент replace () 2 должен быть str, а не 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', '♣'))))