質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2275閲覧

__str__メソッドの役割は何なのか?

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2017/08/09 14:04

__str__メソッドの役割は何なのでしょうか?
ドキュメントのチュートリアルを見ながらwebサイトを作っています。

from django.db import models from django.utils import timezone class Question(models.Model): class Meta: verbose_name = '質問' verbose_name_plural = '質問の複数形' question_text = models.CharField(max_length=200,default='xxxx') pub_date = models.DateTimeField('date published', default=timezone.now) def __str__(self): return self.question_text class Choice(models.Model): question = models.ForeignKey(Question,on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)

とコードを書くと、
イメージ説明
のように”2つの質問”と”what's up?”と質問のタイトルが出てきます。

def __str__(self): return self.question_text

の部分を追加しないと質問のタイトルは出てきません。
この、str__メソッドが何なのかわからないです。クラスオブジェクトをstirng型に変更するものだとは思うのですが、なぜメソッドなのに__str(変数)のように呼び出している箇所がないのに呼び出せているのかわかりません。
また、

def __str__(self)

の引数のselfが何を指しているのか、

return self.question_text

のselfが何を指しているのかもわかりません。これらの部分はどういう役割を持っているのでしょうか?

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この、strメソッドが何なのかわからないです。クラスオブジェクトをstirng型に変更するものだとは思うのですが、なぜメソッドなのにstr(変数)のように呼び出している箇所がないのに呼び出せているのかわかりません。

Djangoが str(そのオブジェクト) を呼んでいます。

def str(self)

の引数のselfが何を指しているのか、

return self.question_text

のselfが何を指しているのかもわかりません。これらの部分はどういう役割を持っているのでしょうか?

selfはそのオブジェクト自身です。

http://docs.python.jp/3/library/stdtypes.html#str から引用します。

str() は object の 文字列 版を返します。 object が与えられなかった場合、空文字列が返されます。それ以外の場合 (...中略...) str(object)object.__str__() の結果を返します。

投稿2017/08/09 14:11

shimizukawa

総合スコア1847

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/10 00:33

ありがとうございます。何点か質問があります。 selfはそのオブジェクト自身 に関して、ここではstrということでしょうか? また、str() は object の 文字列 版を返します に関して”文字列版”とはどういう意味なのでしょうか?
shimizukawa

2017/08/10 01:53

違います。Questionのインスタンスです。文字列版、は、文字列のことです。人間が見て分かる文字にした、ということです。通常この文字列からインスタンスを再現はできません。表示用、ということですね。
guest

0

Classを文字列で表現する際に、
なんと記述するかを明記しているのが、__str__ です。

たとえば、

class MyClass: def __init__(self): self.name = "my class" def getName(self): return self.name def setName(self, name): self.name = name

このようなクラスがあった際に、

print MyClass

としたらなんと出力されるでしょうか?

この時、このクラス内に、

def __str__(self): return "これは<MyClass>です。"

というような記述があった際は、上記のようにprintしたらなんと表示されるでしょうか?

「クラスを文字列で表現する」というシチュエーションは往々にしてあるため、
このようなメソッドが存在します。

投稿2017/08/10 07:07

編集2017/08/10 07:12
tashua314

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問