クラス(class)

SYNTAX class NAME: statement; クラスを定義する。 定義が評価されるとクラスオブジェクトが生成される。
class Test: # これはクラスオブジェクトの変数 ( C++ でのメンバとは異なる ) i = 10; def __init__( self, i ): self.i = i; def f( self ): print "calll method = ", self.i
クラスをインスタンス化するには関数表記() を使う。 これによって空のオブジェクトが作成される。
x = Test(); # 生成されたインスタンスには属性参照ができる # データ属性を参照する print x.i; # 関数オブジェクトのデータ属性を参照する print x.f; # メソッドをコールする。 # x.f(); # メソッドをコールすると第一引数としてインスタンスが関数に渡される。 # 次の処理と同じ。 Test.f( x );



コンストラクタ . constructor

__init__ というメソッドを定義すると インスタンス生成の時点でコールされる。
class Test def __init__( self, i, j ): self.i = i; # コンストラクタに引数を渡してインスタンスを作成する i = Test( 10, 2 );



メソッド(method)

class Test def f( self, i, j ): self.i = i; # メソッドから別のメソッドをコールするには self 引数を経由する def g( self ): self.f(); # メソッドをコールする。 x.f(); POINT # これと同じ Test.f( x );



プライベート変数

POINT クラス内アクセス限定にするには識別子に __ を2個以上を前置する。 これによって名前が変更されるため、外からアクセスされにくくなる。
class Test def f( self, i, j ): self.i = i; def __p( self ): print "calll private method" i = Test( 1, 0 ); # これはコールできない i.__p(); POINT 名前を変更しているにすぎないので, 次のようにコールできる i._Test__p();



文字列表現

__str__ をオーバーライドすると str() 関数の結果をカスタマイズできる
class Test: def __str__(self): return "test"; t = Test() print str(t)



継承

SYNTAX class Name( Base ): statement:
class D( Test ): def h( self ): print "call method h" # オーバーライドするには同名の属性をつける。 def f( self ): print "call overwrite method f" # 派生クラスをインスタンス化する i = D(10, 1); i.h(); POINT # メソッドの探索は派生クラスから順番にされる。 # 属性名として f を指定すると D.f() -> Test.f()と順番に検索される。 i.f();
すべてのクラスは object を継承する。
# 明示することもできる。 class Test( object ): pass # これと同じ class Test: pass



内部クラス

class Test: class Type: """ 内部クラス """



オペレータのオーバーライド

def Vector: def __add__(self, rhs ): def __sub__(self, rhs ): def __mul__(self, rhs ):