- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
class Deck:
def __init__(self):
self.cards=[]
for suit in range(4):
for rank in range(1,14):
card=Card( suit, rank )
self.cards.append(card)
def __str__ (self):
res=[]
for card in self.cards:
res.append(str(card))
return '\n'.join(res)
def pick_card(self):
from random import shuffle
shuffle(self.cards)
return self.cards.pop()
def add_card(self,card):
if isinstance(card, Card): #check if card belongs to card Class!!
self.cards.append(card)
def move_cards(self, gen_hand, num):
for i in range(num):
gen_hand.add_card(self.pick_card())
class Hand(Deck):
def __init__(self, label=''):
self.cards = []
self.label = label
def __str__(self):
return 'The {} is composed by {}'.format(self.label, self.cards)
mazzo_uno = Decks()
hand = Hand('New Hand')
mazzo_uno.move_cards(hand, 5)
print(hand)
我正在尝试学习面向对象编程。当我尝试从子类 Hand() 打印对象 hand 时,我遇到了这个问题。我打印了类似 <main.Card 对象位于 0x10bd9f978> 的内容,而不是 self.cards
列表中 5 张卡片的正确字符串名称:
The New Hand is composed by [<__main__.Card object at 0x10bd9f978>,
<__main__.Card object at 0x10bd9fd30>, <__main__.Card object at 0x10bd9fe80>,
<__main__.Card object at 0x10bcce0b8>, <__main__.Card object at 0x10bd9fac8>]
我也尝试这样做来将 self.cards 转换为字符串,但我得到“TypeError:序列项 0:预期的 str 实例,找到卡”
。
def __str__(self):
hand_tostr = ', '.join(self.cards)
return 'The {} is composed by {}'.format(self.label, hand_tostr)
我在这个网站上的其他答案中读到我应该使用 __repr__
但我不明白如何将它添加到 Hand 类中。
最佳答案
__repr__
和__str__
服务于不同的目的,但工作方式相同。
您可以阅读this帮助您在两种方法之间进行选择。
<小时/>您可以更改 __str__
Hand 类的方法如下:
class Hand:
def __str__(self):
hand_tostr = ', '.join(map(str, self.cards)) # I use map to apply str() to each element of self.cards
return 'The {} is composed by {}'.format(self.label, hand_tostr)
<小时/>
如果您想更改 __repr__
Card 类的方法,您可以尝试类似的方法(您没有提供 Card 类的代码)
class Card:
#your code
def __repr__(self):
return <some string>
现在,如果你这样做str(<list of Card objects>)
它将使用 __repr__
每个卡片实例上的方法来显示您想要的内容。我不是这个解决方案的忠实粉丝,对于您的情况,我会使用第一个解决方案,因为您可能希望为其他情况保留卡片对象的默认表示。
小心这段代码:
def add_card(self,card):
if isinstance(card, Card): #check if card belongs to card Class!!
self.cards.append(card)
如果card不是Card的实例,你就不会引发任何事情。这意味着如果您使用错误的参数使用此方法,错误将被隐藏,并且您将不知道牌组尚未更改。这是相当危险的。你可以这样做:
def add_card(self,card):
assert(isinstance(card, Card)), "card parameter of add_card must be an instance of Card class"
self.cards.append(card)
以更Pythonic的方式,您可以使用 typehint通知您的类的用户该卡应该是 Card 的实例。然后相信 python 的鸭子打字风格,或者使用像 mypy 这样的工具。以验证该方法是否正确使用。
关于python - 如何使用 __str__ 方法打印列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53653859/
在 Python 3 中有没有一种方法可以以编程方式递归调用私有(private)成员变量唯一的 __str__ 函数?像这样的东西: class A: def __str__(self):
我正在用 Python 构建一个简单的类。我已经定义了我自己的 __str__ 方法,当我在类的一个实例上调用 print 时,它应该能很好地工作。当我创建该类的实例并对其调用 print 时,出现错
我一直在尝试创建一个理性类,并添加一个 __str__ dunder 方法返回 p(分子)除以 q(分母)。当我尝试打印对象 Rational_1 时,它只提供 init 方法的输出,并且不返回 __
当我尝试 __str__() 国外的方法它提供这个错误 __str__ returned non-string (type Product) 模型.py class Product(models.Mo
使用这样的嵌套模型: class Gov(models.Model): name = models.CharField(max_length=20) def __str__(self)
在 django __str__ 中有没有办法一次输出所有属性,而不是像我在这里做的那样一个一个输出?我计划拥有大约 100 个属性,因此将所有属性都放在 str 方法中似乎不正确。 class Ca
可以 __str__从字面上返回任何我的灵魂想要的东西? __str__ 上的文档状态: [...] the “informal” or nicely printable string represe
我在容器中打印用户定义的类实例时遇到了一些问题。简而言之,如果我的代码是: class A(): def __str__(self): return 'abc' class B
我是 Python 新手,但我一直遇到与此类似的问题 thread 我当前正在运行: Python 3.6.7 海湾合作委员会8.2.0 没有 IDE,只有普通的 *.py 文件 这是我的类(clas
您好,当我尝试打印我的对象时,我遇到了 __str__ 问题。解释器告诉我“TypeError:格式字符串的参数不足” 这是我正在尝试运行的代码! 'My Practice Class'
我正在尝试改进您在 codecademy python 类(class)中制作的“战舰”游戏,我决定我的第一步是实现类。 我预期的代码输出是五行 O O O O O。当我在 for 循环中只使用一个
这个问题在这里已经有了答案: functools.partial on class method (2 个答案) 关闭 5 年前。 我在尝试为一个程序编写 pretty-print 程序时遇到了这个
这是我的脚本: import math class Vector: def __init__(self, x=0.0, y=0.0): self.x = x s
我正在开发一个绘制线并找到中点的模块。出于测试目的,我想从相关类创建一些字符串输出。 class Line: def __init__(self, endpoints): self.sta
假设我有一个导入的模块,它工作正常但没有提供好的 __str__ 方法,我想添加一个。 在一些混合语言中: from foo import Foo Foo.prototype._str__ = fun
我了解到 __str__可以定义对象字符串的输出。 例子: class Person(object): def __init__(self, name): self.name
这个问题在这里已经有了答案: Why can't I replace the __str__ method of a Python object with another function? (2
在引发异常后,我试图覆盖 Python 中 Exception 子类的打印输出,但我没有运气让我的覆盖实际被调用。 def str_override(self): """ Overri
我想将 python 函数的字符串表示更改为函数名称。 例如某些功能 def blah(x): ... str(blah) 当前给出 所以我这样替换 __str__: blah.__str__=l
谁能告诉我 print sth 和 print str(sth) 之间的区别? 例如在 official documentation for sqlite3 的示例中,目前可以看到以下创建数据库的代码
我是一名优秀的程序员,十分优秀!