#!/usr/bin/env python # coding: utf-8 # #Python Not Heavy 5: class # classという概念はオブジェクト指向プログラミングという現在主流のプログラミング手法の中心概念です。 # もちろん、pythonだけでなく、C++、Java、C#など主流となっている言語はいずれもオブジェクト指向プログラミングに向いた言語仕様となっています。 # # Pythonはオブジェクト指向という考え方を強要しませんし、classの使用も強要しませんが、他人の作ったプログラムがクラスを使用している事は多いですし、自分でもclassを使った方が便利にプログラミングできる場合があります。 # # 今回はそのエッセンスを軽く紹介します。 # ##長方形というclass # 長方形という概念に対応するclassを作ってみましょう。 # In[9]: class 長方形(object): 頂点の角度=90 def __init__(self,tate,yoko): self.縦=tate self.横=yoko def 面積(self): return self.縦*self.横 # - 頂点の角度は全ての長方形に共通する属性。 # - `__init__`という代わった名前の関数が登場しました。これは、クラスから具体的な実体に対応するもの(インスタンスと呼ぶ)を初期化する際に自動的に呼び出される関数です。 # - selfというのは、クラスの内部で関数を定義する際に、自分自身を指す言葉です。 # - 面積という関数を定義しました。 # ##インスタンスの生成 # では、具体的に、このclassを使ってみましょう。 # 普通は、以下のようにclassからインスタンスを作ります。 # In[18]: 長方形A=長方形(3.0,4.0) # - 長方形Aという名前の長方形を作りました。 # - 最初の引数は`__init__`のselfの次の引数tateに相当し、2番目の引数はyokoに相当します。 # - この様にする事で、以下の属性が定義される事になります。 # In[19]: print(長方形A.頂点の角度) print(長方形A.縦) print(長方形A.横) # また、面積を求める関数も定義されています。 # In[21]: print(長方形A.面積()) # classの第一の便利さは、簡単に新しいインスタンスを生成できるという点です。 # In[22]: 長方形B=長方形(5.0,6.0) print(長方形B.頂点の角度) print(長方形B.縦) print(長方形B.横) print(長方形B.面積()) # ##classの継承 # classのもう一つの便利な点は、既存のclassを元に新しいclassが定義できるという点です。元になった既存のclassをsuper classと呼びます。 # In[23]: class 正方形(長方形): def __init__(self,ippen): self.縦=ippen self.横=ippen self.一辺=ippen # In[24]: 正方形C=正方形(5.0) print(正方形C.頂点の角度) print(正方形C.一辺) print(正方形C.縦) print(正方形C.横) print(正方形C.面積()) # ##演算子のオーバーロード # classを継承する場合、super classで定義されていた関数を変更する事があります。 # 上の例では`__init__`がオーバーロードされています。 # ##その他 # super classに無い関数や属性(例:正方形の一辺)を定義する事もできます。 # In[ ]: 以上です。