VBA別館・Python別館

64465

Python クラスを理解するために - Tak

2018/12/21 (Fri) 10:59:13

ここはPythonに限らず、オブジェクト指向をうたっている言語で躓きやすいところです。

① まず言葉の説明 自分の備忘録として書きます

オブジェクト、オブジェクト指向、メソッド、クラス・コンストラクタ、インスタンスなど難しい言葉を先に説明いたします。


*オブジェクト:
・GUIアプリを作るときに、ラベル・テキストボックス・ボタンなどの部品を使いますが、夫々がすべてオブジェクトになります。 オブジェクトとはモノです。
・オブジェクトは「データ」と「機能」の集合体となります。 データとは数字とか文字列のことです。 機能とは、文字列の長さを求めたり、検索・置換と言ったことを差します。
・オブジェクトとは、あるデータを保持する為のメモリー上の塊でもあります。

*オブジェクト指向:
・プログラムを作るとき、オブジェクトを組み合わせてアプリを作ることを言います。
・オブジェクト指向の三大要素というのがあります。「継承」、「カブセル化」、「ポリモーフィズム」ですが、徐々に説明していきます。
 -継承:オブジェクト指向では、実装の際に抽象クラスが持つ機能を具体クラスに継承することができる。
 -カプセル化:オブジェクトにカバーを被せて中身を隠してデータの気密性を高めます。 機能とデータの範囲を明確にします。
 -ポリモーフィズム:多様性のことですが、まだここまでは分かってない。

「継承」だけで十分ではないかな~?

*メソッド:
・オブジェクトが何をするか(何をさせるか)という振る舞いをメソッドとしてクラス内に定義します。
・例えば人の場合なら「歩く」「食べる」などの振る舞いがメソッドといわれるものです。

*クラス:
・オブジェクト指向では、よく共有する性質を持つ仲間を抽出して分類します。その分類をクラスと呼びます。クラスには三つの要素――名前(クラスそのものの名前)、データ(属性)、ふるまい(動作)があります。 これらの要素を持つオブジェクトをまとめて定義したのがクラスというわけです。
・クラスとは分類すること

*コンストラクター:
・クラスからインスタンスが生成されるときに、必ず呼び出される特殊なメソッドのこと。
・コンストラクタはクラス名を書くだけで、勝手に呼び出される。
・インスタンスに初期値を設定するような処理は、コンストラクタとしてインスタンス生成時に纏めて行うと便利。 <--データの初期化である。
・クラス名と同じ名前を持つメソッドとして定義される。
・戻り値は持たない。

*インスタンス:
・クラスから生成された実態がインスタンスです。
・クラスは設計図で、インスタンスはその設計図を基に作られたオブジェクトとなります。
・建築士が書いたものがクラスで、それを基に作られた建物がインスタンスとなります。

今のところ以上ですが追記・修正などを含めて充実させたいと思います。

Re: Python クラスの継承 - Tak

2018/12/23 (Sun) 09:34:13

② 継承の初歩の初歩

・オブジェクト指向 継承機能の説明
・既存の親クラスを元にして子供クラスを作成している.
・親クラスと引き継ぐクラスの関係がわかるように、親子関数・変数を日本語で書いてみました。
# 親の性格を子供が継承している。 

---------------------------

class 親クラス():
  def __init__(俺, 優秀): <---ここがコンストラクター
    俺.性格 = 優秀

俺= 親クラス("親の私は優秀よ。") <---インスタンス
print(俺.性格)

--------------
runさせると、
 親の私は優秀よ。
と表示されました。

・やっぱりcodeに日本語を入れると分かりやすい、good idea!

・これで親の性格を子が受け継ぐことができました。 が、ちょっと腑に落ちないところがあります-->次回


Re: Python クラスを理解するために - Tak

2018/12/23 (Sun) 19:05:36

③ 継承の簡単な例 


------------------------
class 継承():
  def __init__(self, a,b,c):
    self.引継1 = a
    self.引継2 = b
    self.引継3 = c

  def print_合算(self):
    合算 = self.引継1+self.引継2+self.引継3
    print(合算)

複製 = 継承(1,2,3)
複製.print_合算()

--------------------------

・クラスである継承には、コンストラクタ(__init__の部分)とprint_合算というメソッドが含まれます。
・コンストラクタでは引数に指定したa,b,cを属性(self.引継)に渡しています。
・print_合算はインスタンス(複製)が持つ三個の属性の合計を計算・表示します。
・その結果は 6 と表示されます。 1+2+3=6ですね。
・selfのところはどんな文字列でもOKみたいですが、必ず必要です。 それが引き継がれる相手を表します。

少し理解が増えたでしょうか? まだだようね~。

名前
件名
メッセージ
画像
メールアドレス
URL
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.