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

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

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

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

Q&A

解決済

1回答

1838閲覧

継承したインスタンスメソッドの返り値がNoneになる

ensurer2001

総合スコア7

Python 3.x

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

0グッド

0クリップ

投稿2017/11/01 10:34

###前提・実現したいこと
Python3.6でStrategyパターンを実装したい。
Strategyパターンで実装したクラスの関数をString型の文字列で返したい。

###発生している問題・エラーメッセージ

Pythonでオブジェクト指向の勉強しようと思い[1]のサイトを参考に Strategyパターンで処理内容に応じてPrinterを選べるプログラムを実装しました。 そして、print文を文字列処理関数outの外に書きたいと思っており、 関数outは文字列textを返すように書きました。 インスタンスメソッドの中では変数:textは文字列を表しております。 しかし、返り値として処理したtextを指定したところ、Noneが返ってきます return 'word'で固定文字列を返そうとしてもNoneのままです。 おそらく、名前空間やスコープの理解が足りないために起きた問題です。 このような場合に返り値を渡したい時はどのように修正すべきでしょうか?

###該当のソースコード

Python3.6

1# -*- coding: utf-8; -*- 2class ChooseStrategy(object): 3 def __init__(self, title, text, printer): 4 self.title = title 5 self.text = text 6 self.printer = printer 7 8 def output(self): 9 self.printer.output(self.title, self.text) 10 11class Printer(object): 12 def output_report(self, title, text): 13 assert False 14 return text 15 16class SimplePrinter(Printer): 17 def output(self, title, text): 18 #ここになんらかの文字列処理を書く予定 19 print(text) 20 print(type(text)) 21 return text 22 23 24class AuthPrinter(Printer): 25 def output(self, title, text): 26 if(text == 'password'): 27 print(text) 28 return text 29 30if __name__ == "__main__": 31 title = "Hi there!" 32 text = "Mr.smart, I'll give you some blocks. Regards," 33 instant_printer = ChooseStrategy(title, text, SimplePrinter()) 34 final_output = instant_printer.output() 35 print(type(final_output)) 36 print(final_output) 37

###出力結果
User$ python test_strategy.py
Mr.smart, I'll give you some blocks. Regards,
<class 'str'>
<class 'NoneType'>
None

###補足情報(言語/FW/ツール等のバージョンなど)
[1]http://doloopwhile.hatenablog.com/entry/20090627/1275175960
上記のサイトを参考に実装いたしました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ChooseStrategy.outputが値を返していないからです。

Python

1class ChooseStrategy(object): 2 ... 3 4 def output(self): 5 return self.printer.output(self.title, self.text)

ついでに実験コードを置いておきます。

Python

1def hoge(): 2 fuga() 3 4def fuga(): 5 return 1 6 7print(hoge()) 8 9"""出力 10None 11"""

投稿2017/11/01 10:37

編集2017/11/01 10:39
LouiS0616

総合スコア35660

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

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

ensurer2001

2017/11/01 10:42

迅速な回答感謝です。 Python以前にもう一度オブジェクト指向とGofを復習してきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問