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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

12105閲覧

pythonでクラス内のprintでnoneがでないように設定したい。

kabatiro

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/09/26 06:40

pythonでクラスを使ったコードを勉強しています。

クラスの勉強をしている時に、なぜかnoneがでてしまいます。

該当のソースコード

python

1class Cat(): 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 6 def kawaii(self): 7 print('私は、' + self.name + '、' + self.age + '才よ。かわいいでしょ') 8 9 def okoru(self,distance): 10 print('私が怒ったのは、今日' + str(distance) + '回目よ') 11 12first = Cat('みけ','11') 13print(first.kawaii()) 14print(first.okoru(2))

なぜnoneがでてきてしまうのか全くわからないです。

上のコードを実行するとnoneが一回ずつでてしまいます。どうしてnoneがでてしまうのでしょうか。その仕組みが知りたいです。

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

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

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

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

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

guest

回答3

0

Noneが出ているのは以下の2行の実行時です。

python

1print(first.kawaii()) 2print(first.okoru(2))

外側のprint()が実行されたときにNoneが表示されています。

pythonでは関数・メソッドの返り値がない場合、Noneが返ります。

基本的にメソッド自身がメッセージを表示する設計なら、呼び出し側のprint()は不要です。

python

1first.kawaii() 2first.okoru(2)

あるいは、メソッドはメッセージの文字列を返す設計にしても良いでしょう。

python

1 def kawaii(self): 2 return '私は、' + self.name + '、' + self.age + '才よ。かわいいでしょ' 3 4 def okoru(self,distance): 5 return '私が怒ったのは、今日' + str(distance) + '回目よ' 6 7# 中略 8 9print(first.kawaii()) # この場合はprintする 10print(first.okoru(2)) 11 12

投稿2018/09/26 06:45

hayataka2049

総合スコア30933

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

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

kabatiro

2018/09/26 07:05

メソッドの中のprintはしっかり機能して外側のprintがnoneだったんですね!!こんなにも素早く対応してくれてとても嬉しいです。ありがとうございます!!
guest

0

pythonは関数やメソッドの戻り値が記述されていない場合は、Noneを返す仕様になっています。
質問のコードと下のコードと同じになっています。

python

1class Cat(): 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 6 def kawaii(self): 7 print('私は、' + self.name + '、' + self.age + '才よ。かわいいでしょ') 8 return None 9 10 def okoru(self,distance): 11 print('私が怒ったのは、今日' + str(distance) + '回目よ') 12 return None 13 14first = Cat('みけ','11') 15print(first.kawaii()) 16print(first.okoru(2))

print(first.kawaii())
print(first.okoru(2))
は戻り値を表示するように命令しているので、Noneが表示されるわけです。

改善する為には、呼び出す時にprintをしないか
文字列を戻り値で返して呼び出す時にprintするかです。

python

1class Cat(): 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 6 def kawaii(self): 7 return '私は、' + self.name + '、' + self.age + '才よ。かわいいでしょ' 8 9 def okoru(self,distance): 10 return '私が怒ったのは、今日' + str(distance) + '回目よ' 11 12first = Cat('みけ','11') 13print(first.kawaii()) 14print(first.okoru(2))

投稿2018/09/26 06:48

編集2018/09/26 06:50
puroko3

総合スコア185

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

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

kabatiro

2018/09/26 07:04

return none が入ったコードと同じという説明がすごいわかりやすかったです!!こんなに丁寧に教えてくださってありがとうございます!これからもプログラミングの勉強を頑張りたいと思います!
guest

0

ベストアンサー

printが入っているので

python

1first = Cat('みけ','11') 2first.kawaii() 3first.okoru(2)

で良いのでは?

投稿2018/09/26 06:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kabatiro

2018/09/26 06:46

上手くいきました!! こんなしょぼいに答えてくれてありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問