メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年2月20日水曜日

[Python][お勉強] Python入門(44) - Pythonでのオブジェクト指向プログラミング概要

今日はPythonでのオブジェクト指向プログラミング概要から。


Pythonでのオブジェクト指向プログラミング
Pythonにおいてはあらゆるものがオブジェクト。であるが、Pythonにおけるオブジェクト指向プログラミングは、あくまでオプションである、とのこと。


クラス
Pythonにおいて「クラス」は、関数やモジュールと同じような「プログラムの構成単位」である。
他の構成単位と違う特徴は以下のとおり。

  • 1つのクラスを基に複数のオブジェクトを作ることができる
  • 継承によってカスタマイズできる。
  • 演算子のオーバーロードができる。

属性へのアクセス
他の構成単位と同じような形でアクセスできる。

<オブジェクト>.<属性>
 

といった形。
また、上記のように指定した場合、「オブジェクトツリー」の中から属性が検索される。
スーパークラスを上、サブクラスまたはインスタンスを下とし、クラス定義時に左から右へスーパークラスを指定したとすると、検索の優先順位は「下」から「上」へ、「左」から「右」への順。


インスタンスとオブジェクト
Pythonにおいてはインスタンスオブジェクト(インスタンス)とクラスオブジェクト(クラス)は
まったく型の違うオブジェクトとして扱われる。

クラスオブジェクト(クラス)はインスタンスの雛形として機能し、インスタンスはクラスオブジェクトから
属性(データ、関数など)を全て継承する。

インスタンスオブジェクト(インスタンス)は、プログラム中での現実世界の物事に対応するものとして扱われる。個々のインスタンス毎に異なるデータが保持される。

インスタンスは元になったクラスから属性を継承する。


クラスを作るには
classステートメントを使用する。

class C1:
def method1(x):
pass

class C2:
def method2(x):
pass

class C3(C1,C2):
def method3(x):
pass
 

最初のclassステートメントはC1というクラスオブジェクトを生成する。
2番目のclassステートメントはC2というクラスオブジェクトを生成する。
3番目のclassステートメントはC3というC1とC2を継承したクラスオブジェクトを生成する。

クラスオブジェクトが生成されるときの要点を以下に記す。
  • classステートメントが実行されると、クラスオブジェクトが生成される。
  • クラスが呼び出されると、インスタンスオブジェクトが生成される。
  • インスタンスは基になったクラスと自動的にリンクされる。
  • クラスはスーパークラスにリンクされる。
  • スーパークラスはclassステートメントの見出し行で括弧を使用して指定する。
  • スーパークラスの優先順位は括弧の中の並び順で決まる。

クラスの属性
  • classステートメントの中で値の代入が行われた属性は通常クラスの属性になる。
  • classステートメントの中の関数の中で、selfという特殊引数を使って値が代入された属性は、通常インスタンスの属性になる。

__init__メソッド
クラスの中に__init__メソッドが定義されている場合、クラス生成時に自動的にこの__init__メソッドが実行される。

class C1:
def __init__(self, x):
self.name = x
 

__init__の第一引数selfはPythonにより自動的にインスタンスが渡される。
第二引数以降のパラメータ(上記だとx)は、インスタンス生成時に指定したパラメータが渡される。


>>> a = C1('aaa') # インスタンスの生成
>>> a.name #インスタンスの属性にアクセス
'aaa'
>>>
 








おしまい。
.

0 コメント: