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

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

新規登録して質問してみよう
ただいま回答率
85.46%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Python

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

Q&A

解決済

1回答

658閲覧

Pythonのクラス変数の問題

0repeco

総合スコア7

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Python

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

0グッド

0クリップ

投稿2021/06/20 15:15

編集2021/06/20 15:40

以下の問題の答えが何故そうなるか分からないので教えて下さい。
(A)に入るコードと実行結果として正しいものを選択肢から選びなさい。

class Dog:

def__init__(self,name):
self.name=name
self.tricks=[]

 def add_trick(self,trick):
self.tricks.append(trick)

d=Dog('Fibo')
e=Dog('Buddy')
d.add_trick('転がる')
e.add_trick('死んだふり')
(A)

選択肢は、
①>>>d.add_trick
[’転がる']
②>>>de.tricks
[’転がる','死んだふり']
③>>>de.add_trick
[’転がる','死んだふり']
④>>>d.tricks
[’転がる']

私は①だと思いましたが、答えは④でした。何故④が答えになるかが分かりません。
詳しく説明していただける方、お願いします。

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

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

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

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

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

udon-ken

2021/06/20 15:33

pythonのコードはインデントが無いと基本的に読めないので、コードを挿入でインデントを付けてコードを提示して下さい。 よーく見れば分かるかもしれませんが、これは基本中の基本なので修正して下さい。
0repeco

2021/06/20 15:42

失礼しました。 スペースでインデントつけたのですが、投稿するを押すと全て左寄りになってしまいました。 teratail初心者なのですが、インデントつける方法を教えて頂けますでしょうか?
udon-ken

2021/06/20 15:45

質問を入力するテキストエリアの上にアイコンが並んでいるので、コード部分を選択しておいてその中の<code>を押します。
guest

回答1

0

ベストアンサー

①>>> とか書かれていますから、Pythonの対話モードでの実行での話ですね。

Pythonの対話モードで式(正確はに式文)を実行してその結果がNoneでない場合は結果が表示されます。
Pythonの対話モードで(正確はに式文)を実行してその結果がNoneである場合はなにも表示されません。
Pythonの対話モードで式文でない文を実行した場合はなにも表示されません。

もしも式と文と式文がわからない場合は以下をお読みください。

Pythonの式と文の違いは何ですか?

ここまでは理解できているでしょうか。

次に x.a はxの属性aを表す式です。
単独で行に書かれた場合は、式文になります。

ではここから個々の文で何が起こるかを説明します。

d=Dog('Fibo') ではクラスDogのインスタンスが生成されて、dという変数に束縛されます。
(変数への代入のようなものです)。e=Dog('Buddy')も同じようななものです。
このとき、d.tricksもe.tricksも[]です。

d.add_trick('転がる') が実行されると、d.tricksが['転がる']になります。それは、add_trickが実行されるからです。
e.add_trick('死んだふり') が実行されると、同じようにe.tricksが['死んだふり']になります。

①>>>d.add_trick
は、Dogクラスのインスタンスであるdのインスタンスメソッドであるadd_trickという式文です。
実行してみるとわかりますが

<bound method Dog.add_trick of <main.Dog object at 0x000002639BD01550>>

のようなものが表示されます。

②>>>de.tricks
③>>>de.add_trick
はエラーです。エラーになる理由は、deが定義されていない変数だからです。

④>>>d.tricks
はDogクラスのインスタンスであるdの属性tricksという式文です。この値は['転がる']ですのでそれが表示されます。

なお、d.tricksもe.tricksも院sタンス変数ですので、タイトルの「クラス変数の問題」というのは不適切です。

投稿2021/06/20 16:00

ppaul

総合スコア24666

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

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

0repeco

2021/06/20 16:28

ppaulさん 詳しい説明ありがとうございました。お陰で理解できました。 タイトルの不適切もご指摘頂き、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問