\n |
[ トップページ ]
[ ____CommandPrompt ]
[ ____JScript ]
[ ____MySQL ]
[ ____Cygwin ]
[ ____Java ]
[ ____Emacs ]
[ ____Make ]
[ ____Perl ]
[ ____Python ]
[ ____OpenGL ]
[ ____C# ]
[ ____StyleSheet ]
[ ____C++ ]
[ ____Winsock ]
[ ____Thread ]
[ ____VisualStudio ]
[ ____C ]
[ ____Win32API ]
[ ____Lua ]
[ ____PhotoShop ]
ヘッダ検索
■ クラス(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 ):
|
|
NINJAIDX 8