2016-07-09 6 views
0

で_str_方法にもかかわらず、オブジェクトを印刷することはできません:は、私は、属性<code>title</code>と<code>author</code>と方法私<code>Book</code>クラスで<code>_str_</code>を定義したクラス

def _str_(self): 
    book_line = "{title} by {author}".format(title=self.title, author=self.author) 
    return book_line 

、私はこのクラスのインスタンスを作成するときに(たとえばbook1 )、属性に値を割り当て('title1''author1')、オブジェクトを印刷しようとすると、Pythonはbook_lineを返しません。

代わりに、私はこの厄介な出力を得る<\_main\_.Book object at 0x02BC9A30>。一方、book1._str_()を実行すると、book_lineが返されます。

どうしたのですか?

答えて

2

"魔法"の方法には2つのアンダースコアが必要です。それがなければならない:

def __str__(self): 

    #stuff 

それが「プライベート」(またはセミプライベート)方法を示すために使用される単一のアンダー。

二重アンダースコアは名前のマングリングを呼び出します。通常、サブクラス内のメソッドのオーバーライドを防ぐために使用されます。

あなたには、いくつかのクラスFoo持っていた場合:このメソッドは、_Foo__bar

だろうと、マジックメソッドはメソッド名の両方脇に二重のアンダースコアを使用

class Foo: 

    def __bar(self): pass 

を。

+1

よろしくお願い致します。私はそれにかなり新しいです。ちなみに、なぜPythonはスクリプトを実行したときにそれを間違いとみなしませんでしたか? '_str_'は完全に有効な関数名であるため、 – Sylwia

+0

です。 Pythonはあなたが '' __str__'を意味していることを知らない –

+0

これはまだ有効なメソッド名なので、技術的に誤植ではありません。 – Pythonista

関連する問題

 関連する問題