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

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

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

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

Q&A

解決済

2回答

4936閲覧

関数の問題の答えがなぜそうなるのか分からない。

Nishin

総合スコア30

Python 3.x

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

0グッド

0クリップ

投稿2020/12/18 00:19

私は現在、Python3基礎認定試験で合格することを目標として、公式チュートリアルとネット上の公開模試を使って勉強しております。

つい最近「PRIME STUDY」というサイトの模試を受験したところなのですが、どうにも分からない問題が幾つかあって、それらの理解に手間取ってしまっています。

次の問題がそのうちの一つです。

Python

1Q.次の実行結果を得たい場合、コードの【A】【B】の行に入る組み合わせとして適切なものはどれか。なお【A】は★aの行と、【B】は★bの行と同じ数の空白でインデントされている。 2 3[ 実行結果 ] 4I'm Saya. 5I'm Magatama. 6I'm David. 7 8[ コード ] 9class kusanagi(): 10 def s(self): 11 print("I'm Saya.")  …★a  12 【A】 13 def m(self):   …★b 14 print("I'm Magatama.") 15 16class onimaru(kusanagi): 17 【B】 18 print("I'm David.") 19 20k = kusanagi() 21o = onimaru() 22k.s() 23o.d() 24 25<選択肢> 26・【A】self(m): 【B】self(d) 27・【A】self(m): 【B】def d(self): 28・【A】self(m) 【B】self.d() 29・【A】self.m() 【B】def d(self): 30・【A】self.m() 【B】self.d() 31

この問題、正答は「【A】self.m() 【B】def d(self):」なのですが、何故こちらの答えになるのかが、チュートリアルやPythonの基礎学習サイトをあたってもよく分からない状態にあります。

憶測ではあるのですが・・・

・self.関数名()の()内を何も指定せずに関数を記述した場合は、関数内の内容(今回の場合は「print("")」)が出力される。
・dという関数は初出なので定義する必要がある。
・そしてその定義の際には関数横の()内にはselfと書く決まりがある。

こういう風な事なのではないかと考察しているのですが、
こちらの問題の正答。本当のところはどうしてこちらの答えになるのか、詳しい事をご存じないでしょうか。

また、例えば「self(m)」と記述した場合、どのように出力されるのか。
こちらもご存知でしたらご回答をお願いします。

お手数ではありますが、今回も宜しくお願いします。

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

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

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

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

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

maisumakun

2020/12/18 00:23

逆に聞きますが、Nishinさんは「どれが正しい」と考えたのですか?
ozwk

2020/12/18 00:25

> また、例えば「self(m)」と記述した場合、どのように出力されるのか。 実際にやってみればいいんじゃないですかね?
guest

回答2

0

ベストアンサー

python

1k = kusanagi() 2o = onimaru() 3k.s() 4o.d()

このコードから、kusanagiクラスのインスタンスkとonimaruクラスのインスタンスoを生成
kusanagiクラスのメソッドsを呼び出し、
次にonimaruクラスのメソッドdを呼び出していることがわかります。

次に実行結果を見ると以下のように2番目の結果が出力されないことがわかります。
メソッドsを呼び出した結果:I'm Saya.
I'm Magatama.
メソッドdを呼び出した結果:I'm David.

ですので、メソッドsのなかで2番目の出力を行うkusanagiメソッドのmを呼び出す必要があることがわかります。

上記のことから、Aはmを呼び出すためのコードが、Bにはメソッドdを定義するためのコードが必要だということがわかります。
mを呼び出すためのコードは選択肢の中から4と5
メソッドを定義するためのコードは選択肢の中から2と4となります。
メソッドを呼び出す書き方やメソッドを定義する書き方は学習サイトとかに書いてあるのではないでしょうか。

投稿2020/12/18 03:00

t_obara

総合スコア5488

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

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

Nishin

2020/12/18 11:09

詳細な解説をご記載頂き、ありがとうございます。 ご説明の順を追っていきましたら、当初よりもずっと鮮明に理解できました。 しかし、前に解答されていた方も仰っていましたが、この部分については、もっと基礎的な参考書を一度あたってみて、そちらで具体例を読み解きながら吸収していく必要があるかと思われました。 (メソッドの呼び出しについて、でしたね)
guest

0

また、例えば「self(m)」と記述した場合、どのように出力されるのか。

selfkusanagiのインスタンスであって関数ではなく、そしてこのメソッドから見えるスコープ内でmの定義はなされていませんので、呼び出せずエラーとなります(paiza.io)。

投稿2020/12/18 00:28

maisumakun

総合スコア146018

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

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

maisumakun

2020/12/18 00:35

一度、Pythonの文法を体系的に学ぶ必要があるのではないかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問