目次
基本的な使い方
基本的なクラスの形は以下になります。
class Test(object):
def say_hello(self):
print('Hello world!')
(object)
は記載しなくてもいいですが、以降で説明しますがクラスの継承と区別する上で個人的に記載するのが好みです。上記まではクラス定義で以降で実際にクラスを呼ぶところを書いていきます。
test = Test()
これでインスタンスが生成されます。クラスの中の関数(say_hello
)を呼ぶには、インスタンス.関数
と以下のように呼べます。
test.say_hello()
==================以降出力
Hello world!
コンストラクタとデストラクタ
コンストラクタ
コンストラクタはインスタンスを生成した際に一度だけ呼ばれるもので、主に初期化する際に用いられます。def __init__
で定義します。ここではコンストラクタで取得したword
をself.word
に格納しsay_hello
の関数で表示させています。
class Test(object):
def __init__(self, word):
self.word = word
def say_hello(self):
print('Hello {}'.format(self.word))
先ほどと同様にインスタンスを生成し、関数(say_hello
)を呼んでみます。
test = Test('wold')
test.say_hello()
==================以降出力
Hello world!
出力は先程と同じですが、インスタンス生成時に引数として'wold'
を渡しています。インスタンス生成と同時にdef __init__
が呼ばれ、クラス内の情報を持つself.word
に引数の情報を渡します。クラス内の関数は全て第一引数にself
を記載する必要があります。呼び出し元での第一引数はクラス内では第二引数となります。ただし、例外もあり以降で説明します。
デストラクタ
次はデストラクタに関して記載していきます。コンストラクタが初期化処理だとすると、デストラクタは終了処理で処理の最後に呼ばれるものになります。def __del__
で定義します。
class Test(object):
def __init__(self, word):
self.word = word
def say_hello(self):
print('Hello {}!'.format(self.word))
def __del__(self):
print('end')
先ほどと同様にインスタンスを生成し、関数(say_hello
)を呼んでみます。デストラクタが最後に呼ばれていることを確かめるため、関数(say_hello
)を読んだ後に**********
を表示します。
test = Test('wold')
test.say_hello()
print('**********')
==================以降出力
Hello wold!
**********
endtest = Test('wold')
test.say_hello()test = Test('wold')
test.say_hello()
print('**********')
==================以降出力
Hello wold!
**********
end
上記で全ての処理が終わった後にデストラクタが呼ばれることが確認できると思います。
クラス内で定義した他の関数を呼ぶ方法
クラス内で関数を作成している際に、クラス内にある別な関数を呼びたいということがあると思います。その際には、self.関数
で呼び出すことができます。ここでは新たにend_hello
関数を定義しており、それをsay_hello
でself.end_hello()
と呼んでいます。
class Test(object):
def __init__(self, word):
self.word = word
def say_hello(self):
print('Hello {}'.format(self.word),end='')
self.end_hello()
def end_hello(self):
print('!')
def __del__(self):
print('end')
先ほどと同様にインスタンスを生成し、関数(say_hello
)を呼んでみます。
test = Test('wold')
test.say_hello()
print('**********')
==================以降出力
Hello wold!
**********
end
コードは増えていますが出力している内容は同じなので結果も先程と同じになります。
コメント