我无法让这个__str__
工作。
我创建了一个类,
class Hangman :
然后
def __str__(self) :
return "WORD: " + self.theWord + "; you have " + \
self.numberOfLives + "lives left"
程序中有一个init语句和赋值,但是我无法使用它!
我能做到的唯一方法是这样做,但肯定是使用__str__
def __str__(self) :
print("WORD: {0}; you have {1} lives left".\
format(self.theWord,self.numberOfLives))
代码:
theWord = input('Enter a word ')
numberOfLives = input('Enter a number ')
hangman = Hangman(theWord,numberOfLives)
Hangman.__str__(hangman)
输出:
>>>
Enter a word Word
Enter a number 16
>>>
使用print方法,输出:
>>>
Enter a word word
Enter a number 16
WORD: word; you have 16 lives left
>>>
答案 0 :(得分:3)
Hangman.__str__(hangman)
这一行只是调用 __str__
方法。这是顺便说一句。这是首选方法(一般情况下,不要直接调用特殊方法):
str(hangman)
str
和__str__
方法只是将对象转换为字符串,但不打印它。例如,您也可以将其记录到文件中,因此打印并不总是合适的。
相反,如果你想打印它,只需打印它:
print(hangman)
print
会自动在对象上调用str()
,因此使用类型的__str__
方法将其转换为字符串。
答案 1 :(得分:0)
喜欢这篇文章说:https://mail.python.org/pipermail/tutor/2004-September/031726.html
>>> class A:
... pass
...
>>> a=A()
>>> print a
<__main__.A instance at 0x007CF9E0>
If the class defines a __str__ method, Python will call it when you call
str() or print:
>>> class B:
... def __str__(self):
... return "I'm a B!"
...
>>> b=B()
>>> print b
I'm a B!
引用
回顾一下:当你告诉Python“print b”时,Python将str(b)调用到 获取b的字符串表示形式。如果b的类有__str__ 方法,str(b)成为对b .__ str __()的调用。这将返回字符串 打印。
答案 2 :(得分:0)
Hangman.__str__(hangman)
不是打印hangman
字符串表示的命令,它是一个表达式,其值为hangman
的字符串表示形式。
如果您在交互式提示符下手动键入,则会获得打印表达式的值,因为交互式提示会为方便起见。在脚本中(或在您调用的函数中)拥有该行不会打印任何内容 - 您需要实际告诉python使用print(hangman)
打印它。
答案 3 :(得分:0)
此代码有效:
class Hangman(object):
def __init__(self, theWord, numberOfLives):
self.theWord = theWord
self.numberOfLives = numberOfLives
def __str__(self) :
return "WORD: " + self.theWord + "; you have " + \
self.numberOfLives + " lives left"
if __name__ == '__main__':
theWord = input('Enter a word ')
numberOfLives = input('Enter a number ')
hangman = Hangman(theWord,numberOfLives)
print(hangman)
输出:
>>>
Enter a word word
Enter a number 16
WORD: word; you have 16 lives left