2013-11-27 5 views
1

Мне не удается получить этот __str__ для работы. я создал класс,Метод __str__ в Python

class Hangman : 

, а затем

def __str__(self) : 
return "WORD: " + self.theWord + "; you have " + \ 
self.numberOfLives + "lives left" 

есть в заявлении инициализации и назначение в программе, но я не могу получить вещь, чтобы работать! единственный способ, которым я могу это сделать, делая это, но, конечно, в чем смысл использования __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 
>>> 

с помощью метода печати , выход:

>>> 
Enter a word word 
Enter a number 16 
WORD: word; you have 16 lives left 
>>> 
+0

Определение «не может получить вещь, чтобы работать» – Sinkingpoint

+0

извините, это как раз просто не печатать, как это предполагают, чтобы – JamesDonnelly

+0

Тогда дайте пример фактического выхода и ожидаемого выхода. – Sinkingpoint

ответ

3
Hangman.__str__(hangman) 

Эта линия будет только позвонить по телефону__str__ метод. Так и происходит. который является предпочтительным способом сделать это (вообще говоря, не называют специальные методы непосредственно):

str(hangman) 

str и метод __str__ просто там преобразовать объект в строку, но не для печати Это. Например, вы можете просто записать его в файл, поэтому печать не всегда будет подходящей.

Вместо этого, если вы хотите напечатать, просто распечатать его:

print(hangman) 

print будет автоматически вызывать str() на объекте и, таким образом использовать __str__ метод типа, чтобы преобразовать его в строку.

+0

Ahhhh! Не могу поверить, что все так просто. Большое спасибо! – JamesDonnelly

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, чтобы "напечатать б", Python называет ул (б) получить строковое представление б. Если класс b имеет метод __str__ , str (b) становится вызовом b .__ str __(). Это возвращает строку для печати.

0

Hangman.__str__(hangman) не является командой, чтобы напечатать строковое представление hangman, это выражение, которое вычисляется в строковое представление hangman.

Если вы введете это вручную в интерактивном приглашении, вы получите значение напечатанного выражения, потому что интерактивное приглашение делает это как удобство. Наличие этой строки в скрипте (или в функции, которую вы вызываете) ничего не напечатает - вам нужно на самом деле сообщить python о ее печати, с print(hangman).

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 
Смежные вопросы