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

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

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

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

Python

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

Q&A

解決済

3回答

1271閲覧

Python Classについての解説お願いいたします

dokidoki_hamuo

総合スコア38

Python 3.x

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

Python

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

0グッド

3クリップ

投稿2020/04/01 07:06

Classについての解説お願いいたします。

def文とclassを勉強していたのですが、classに関してなんとなく理解はできるのですが。いまいちぴったりはまらなくてもやもやしてます。

↓こちらの例文を参考に質問させていただきます。
【参考】https://snowtree-injune.com/2019/02/11/python-class-necessity/

Python

1#データ4つとメソッド(関数)1つをカプセル化 2class tokuten_data: 3    def __init__(self): 4        self.name = '' 5        self.kokugo = 0 6        self.sansuu = 0 7        self.heikin = 0.0 8          9    def heikin_cal(self): 10        self.heikin = (self.kokugo + self.sansuu) / 2 11 12#変数taroに、データ4つとメソッド(関数)1つをカプセル化したオブジェクトを代入 13taro = tokuten_data() 14taro.name = '太郎'   #nameに'太郎'を代入 15taro.kokugo = 50     #kokugoに50を代入 16taro.sansuu = 45     #sansuuに45を代入 17taro.heikin_cal()  #メソッドheikin_cal()の実行 18 19#変数hanakoに、データ4つとメソッド(関数)1つをカプセル化したオブジェクトを代入 20hanako = tokuten_data() 21hanako.name = '花子'   #nameに'花子'を代入 22hanako.kokugo = 90     #kokugoに90を代入 23hanako.sansuu = 85     #sansuuに85を代入 24hanako.heikin_cal()  #メソッドheikin_cal()の実行 25 26print(taro.name, 'の平均点:', taro.heikin) 27print(hanako.name, 'の平均点:', hanako.heikin) 28---

解説してほしいこと

hanako = tokuten_data()

このhanakoには
hanako.name = '花子
hanako.kokugo = 90  
hanako.sansuu = 85  
hanako.heikin_cal()
4点の情報がリストとして入ってるということなのでしょうか?
(taroは省略します)

初心者向けに詳しい解説できる方よろしくお願いいたします。

書籍読む、python class で検索し、さまざまなサイトを見てみたのですが、しっくりきません。

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

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

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

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

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

quickquip

2020/04/01 07:54

辞書(dict型)は分かりますか?(使えますか)
dokidoki_hamuo

2020/04/01 08:08

こんにちは。 >>> my_cat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'} >>> my_cat['size'] 'fat' という辞書型のことでしょうか?
nskydiving

2020/04/01 08:10

どの部分がしっくりこないのでしょうか?(説明してほしいのはどの部分でしょうか?)
netsuy

2020/04/01 08:13

こんにちは。オブジェクト指向の説明をしてほしいのでしょうか?それとも何故こういう書き方をしているのか、何をしているのか、とかでしょうか?
dokidoki_hamuo

2020/04/01 08:15

hanako = tokuten_data() このhanakoには hanako.name = '花子 hanako.kokugo = 90 hanako.sansuu = 85 hanako.heikin_cal() 4点の情報がリストとして入ってるということなのでしょうか? (taroは省略します) というような、hanakoに何が入っているかがいまいち把握できないこと。 最後のhanako.heikin はself.heikin = (self.kokugo + self.sansuu) / 2 のselfにhanakoをいれたということですか? 仮にそうだとして(間違ってたらすみません)、 hanako = tokuten_data() このhanakoには hanako.name = '花子 hanako.kokugo = 90 hanako.sansuu = 85 hanako.heikin_cal() 4点の情報は どこにいったのだろう、処理はどうなっているのだろう???という ことで困惑しています。
dokidoki_hamuo

2020/04/01 08:27

netsuy様 hanako = tokuten_data() このhanakoには hanako.name = '花子 hanako.kokugo = 90 hanako.sansuu = 85 hanako.heikin_cal() 4点の情報が入っているのか。仮にそうだとして 最後に print(hanako.name, 'の平均点:', hanako.heikin) hanako.nameとありますが、 hanako = tokuten_data() これに入れる意味はあるのですか? 何のためにあるのですか? hanako.name = '花子 だけでもいいんじゃないかなぁ、と思ってしまったのでした。 ということだったのですが、初心者なので見当違いな疑問だったらすみません。
dokidoki_hamuo

2020/04/01 08:28

>>>何故こういう書き方をしているのか、何をしているのか ということです。 長文失礼しました。
nskydiving

2020/04/02 08:54

以下の 4 点について、理解があやふやではないのかなと思いますので、一度調べてみてください。 ・コンストラクタ(def __init__(self)) ・クラスとインスタンスの違い ・メンバ変数(インスタンス変数)とメソッドの違い ・self の意味
dokidoki_hamuo

2020/04/02 09:17

具体的なアドバイス感謝しますーー!!非常に参考になります!!調べてみます!ありがとうございます。
dokidoki_hamuo

2020/04/06 01:58

nskydiving様 先日は具体的なワードを提示して頂きありがとうございます。 合っているのかあまり自信がないのですが、色んなサイトを見てみて自分なりに解釈してみました。 ・コンストラクタ(def __init__(self))  初期化。 インスタンス作成時に自動的に呼ばれる。  return書かなくとも、自動的にselfが返ってくる  ということから、簡略化して書けるから楽だという感じですか?  初期化を忘れずに済むから基本的に使ったほうがいいよー、ということなのですか?? ・クラスとインスタンスの違い  インスタンス→taro = tokuten_data()  クラス(設計図)を実際に動かすための処理(実体化みたいな感じですか?)  ということなので、taro = tokuten_data()と記述しないと動かない、ということだと思いました。  ・メンバ変数(インスタンス変数)とメソッドの違い  メソッドは処理のこと  インスタンス変数は→self.name = '' の部分のname ・self の意味  関数__init__の第一引数。例えばhumanでも構いませんが、かみ砕いていうとpythonのコードはこうやって書きましょうという感じの決まりごとでselfにしている。ということですか? 合っていない部分がありましたら、解説頂けると嬉しいです。お手すきの際に、もしよろしければ、ご確認よろしくお願い致します。
nskydiving

2020/04/06 02:16

概ね理解は合っていると思います。 その上で、質問欄に記載している疑問は解消されましたでしょうか?
dokidoki_hamuo

2020/04/06 02:32

本当ですか!!! でしたら、回答くださった hanako = tokuten_data() # 右辺でインスタンス化して生成したインスタンスを変数hanakoに束縛 hanako.name = '花子' # 変数hanakoに束縛されたインスタンスのname属性に'花子'を代入 # 略 hanako.heikin_cal() # 変数hanakoに束縛されたインスタンスのメソッドheikin_cal()の実行 の意味も把握できました!!! 疑問は解消されました。 hayataka2049様にも大変感謝しておりますが、nskydiving様のキーワードが疑問解消になったので、nskydiving様をベストアンサーにさせていただきたいと考えております。 大変お手数をおかけしますが、自分の考えている処理の経過と照らし合わせてもう一度考えたいので、上記コードの処理の経過を回答として載せていただくことは可能でしょうか。
guest

回答3

0

taroとかhanakoはtokuten_dataクラスのインスタンスです。
インスタンスはそれぞれ名前、国語の点数、算数の点数の情報を保持しています。

heikin_cal()はtokuten_dataクラスのメソッドです。
taroとhanakoはtokuten_dataクラスのインスタンスなので、それぞれこのメソッドを持っています。
heikin_cal()を呼び出すことで、国語と算数の平均点を計算してその情報をインスタンスに保存します。

投稿2020/04/01 11:53

meg_

総合スコア10760

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

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

0

ベストアンサー

以下の 4 点について、理解があやふやではないのかなと思いますので、一度調べてみてください。

  • コンストラクタ(def init(self))
  • クラスとインスタンスの違い
  • メンバ変数(インスタンス変数)とメソッドの違い
  • self の意味

以下補足です。

hanako = tokuten_data() # 右辺でインスタンス化して生成したインスタンスを変数hanakoに束縛
hanako.name = '花子' # 変数hanakoに束縛されたインスタンスのname属性に'花子'を代入

その通りの理解で良いです。

このhanakoには
hanako.name = '花子
hanako.kokugo = 90
hanako.sansuu = 85
hanako.heikin_cal()
4点の情報がリストとして入ってるということなのでしょうか?

hanako インスタンスが保持しているのは、以下のメンバ変数です。(上記ですと、heikin が抜けています)

  • name
  • kokugo
  • sansuu
  • heikin

heikin_cal はメソッドですので、何かデータとして保持しているわけではありません。

また、インスタンスの変数はリスト型ではなく、辞書型 (dictionary)で保持しています。

python

1# インスタンス変数名の一覧を表示する 2print hanako.__dict__.keys() 3 4# インスタンス変数の値一覧を表示する 5print hanako.__dict__.values()

投稿2020/04/06 02:53

nskydiving

総合スコア6500

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

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

dokidoki_hamuo

2020/04/06 03:00

ご回答くださった皆様本当にありがとうございました
guest

0

オブジェクト指向における属性の概念を知らないのでは?

それで調べてみてください。

本当は詳しく解説したいのですが、質問者さんの理解の程度に依存するので難しいのと、今少し忙しいので取り急ぎこれだけで。。。不明点をコメントしていただければ対応します。

投稿2020/04/01 13:24

編集2020/04/01 13:27
hayataka2049

総合スコア30935

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

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

dokidoki_hamuo

2020/04/01 22:17

オブジェクト指向における属性の概念ですね!!! それは理解していないと思いました。ありがとうございます。一度調べてから、再度質問させて頂けると嬉しいです。よろしくお願いします。忙しいところ的確なワードありがとうございます。
dokidoki_hamuo

2020/04/02 05:54 編集

【誤字がありましたので修正】 オブジェクト指向 属性で調べたところ知りたいことがいっぱいでてきました! ありがとうございます。 何度も調べなおしながら整理しているので、これであっているのか確認させてください。 処理の経過を以降自分なりに整理してみました。 hanako = tokuten_data() >>>クラスメソッド:class tokuten_dataを使用 hanako.name = '花子' hanako.kokugo = 90 hanako.sansuu = 85 クラスメソッド:class tokuten_dataを使用して、この3点を変数hanakoにそれぞれ代入 hanako.heikin_cal() >>>def heikin_cal(self)を使うという設定??(ここが合っているが怪しいです) self.heikin = (self.kokugo + self.sansuu) / 2 という関数なので hanako.heikin で最後に計算結果を表示 という解釈であっていますでしょうか?
dokidoki_hamuo

2020/04/02 02:17

classにしたのはhanakoとtaroなどいろんなパターンに使いまわすことができるから、ということだと思ったのですが、合っていますでしょうか?
hayataka2049

2020/04/02 08:39

解釈について:あまり合っていないと思います。 hanako = tokuten_data() # 右辺でインスタンス化して生成したインスタンスを変数hanakoに束縛 hanako.name = '花子' # 変数hanakoに束縛されたインスタンスのname属性に'花子'を代入 # 略 hanako.heikin_cal() # 変数hanakoに束縛されたインスタンスのメソッドheikin_cal()の実行
dokidoki_hamuo

2020/04/02 08:44

そうなんですか!! すみません、もう一度回答を参考にして調べなおして整理してきます。 お忙しいところ恐縮ですが、その後何かあった場合質問させて頂けると嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問