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

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

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

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

Q&A

解決済

3回答

714閲覧

Pythonの __str__() について知りたい

Jun1971

総合スコア9

Python

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

0グッド

0クリップ

投稿2020/09/30 17:07

Pythonについての質問です。__str__()についてです。

class PersonA: def __init__(self, name, age): self._name = name self._age = age class PersonB(PersonA): def __str__(self): return '%sは%d歳です' % (self._name, self._age) a = PersonA('太郎', 10) b = PersonB('花子', 20) print(a) print(b) # 花子は20歳です

__str__()はオブジェクトを表示するときに使います。具体的にどんな時に使いますか?
PersonBで(b)を表示したから’花子は20歳です’と表示される。なぜ、このような表現をする
のでしょうか。それと、訳したとしたら、どんな意味ですか?

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

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

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

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

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

guest

回答3

0

一番良く使うのは、以下のようなパターンではないですか。

python

1str(100)

整数値を文字列にする際に、上記のようにすると思います。
これは、int型に__str__メソッドがあるからです。

python

1int.__str__(100)

このように、特定のクラスの値を文字列に容易に変換するために使用します。

投稿2020/09/30 23:35

katsuko

総合スコア3538

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

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

0

ベストアンサー

文法上では、__str__() はクラスのデフォルト文字表示を定義している。でも、Person クラスみたいな、いろんな表示が可能なクラスはたくさんあるよね。

なぜ、このような表現をするのでしょうか。

print(var)を用いてデバッグ中にvarの内容を確認することが多いから、一般的には__str__()がなるべく簡潔にクラスのメンバー変数や重要な属性など表示します。下記のような:

python

1class PersonA: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 def __str__(self): 6 return f'PersonA(name={self.name}, age={self.age})' 7 8a = PersonA('太郎', 10) 9print(a) 10# PersonA(name='太郎', age=10)

でも他の文字表示はどうする?方法は二つ。一つ目は別のメソッドで定義する:

python

1class PersonA: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 def __str__(self): 6 return f'PersonA(name={self.name}, age={self.age})' 7 def pretty_str(self): 8 return f'{self.name}{self.age}歳です' 9 10a = PersonA('太郎', 10) 11print(a) 12# PersonA(name='太郎', age=10) 13print(a.pretty_str()) 14# 太郎は10歳です

二つ目は問題文のように、別のクラスで定義する:

python

1class PersonAPrettier(PersonA): 2 def __str__(): 3 return f'{self.name}{self.age}歳です' 4 5a = PersonA('太郎', 10) 6print(a) 7# PersonA(name='太郎', age=10) 8ap = PersonAPrettier(a) 9print(ap) 10# 太郎は10歳です

どの方法を使うか人やプロジェクトそれぞれです。自分で色々試してください!

Update: コード例を修正しました。

投稿2020/09/30 20:52

編集2020/10/01 16:57
YufanLou

総合スコア464

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

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

Jun1971

2020/10/01 07:16

2番目のソースコードを実行したらエラーがでました。引数に sel fを2か所、入れたらインタプリターが通りました。結果もばっちりです。 例文が多くてわかりやすかったです。説明もとてもよかったです。ありがとうございました。Pythonは シンプルですが、色んな機能や表現が多くて優秀な言語ですね。
guest

0

str()はオブジェクトを表示するときに使います。具体的にどんな時に使いますか?

以下のような使い方が最も多いと思われます

namae = "鼻子" print(namae)

理由は以下引用文を参照のこと
https://docs.python.org/ja/3/library/stdtypes.html#str

Python のテキストデータは str オブジェクト、すなわち 文字列 として扱われます class str(object=b'', encoding='utf-8', errors='strict') object の 文字列 版を返します。 object が与えられなかった場合、空文字列が返されます。それ以外の場合 str() の動作は、 encoding や errors が与えられたかどうかによって次のように変わります。 encoding も errors も与えられない場合、 str(object) は object.__str__() の結果を返します。これは "略式の" つまり読み易い object の文字列表現です。文字列オブジェクトに対してはその文字列自体を返します。 object が __str__() メソッドを持たない場合、str() は代わりに repr(object) の結果を返します。

それと、訳したとしたら、どんな意味ですか?

なにを?

投稿2020/09/30 17:34

hentaiman

総合スコア6426

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問