python-3.x - 在 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', '♣'))))
解决方案
NumberCard(1, Suit('Club', '♣'))
所以,等级是一个整数
你在打电话replace("%r", self.rank)
错误说replace() argument 2 must be str, not int
str(self.rank)
在替换中使用
推荐阅读
- javascript - 如何在 Laravel Mix 生成的生产中包含缩小的 javascript 文件?
- kubernetes - helm toJson 函数按字母顺序排列
- r - 如何使用 downloadHandler 在闪亮的数据表中创建下载按钮?
- reactjs - 在 Drawer 组件内编辑组件
- java - java.lang.NoSuchMethodError: No virtual method group(Ljava/lang/String;) JDBC 相关
- objective-c - macOS Catalina 10.15 中 NSData 的 MD5 向 macOS 10.14 返回不同的结果
- angular - 如何在 Angular 应用程序中添加模块而不会在控制台中出错?
- mpi - 带有 MinGW 和 Eclipse 的 MPI
- php - Ajax 文件上传从 php 端给出未定义的索引文件
- java - 即使在 nashorn 中的代码中存在语法错误,如何获取 ParseTree