クラス(class)
SYNTAX
class NAME:
statement;
クラスを定義する。
定義が評価されるとクラスオブジェクトが生成される。
class Test:
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;
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
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 ):