Python_クラス
クラスの作成
pythonクラスの特徴
- クラス名の先頭は大文字です。
- メソッドは最低1つの引数を持ちます。selfという名前にする慣例があります。他言語におけるthisと同等です。
- インスタンス生成にnewキーワードは指定しない。
コンストラクタ
コンストラクタは「__init__()」という名前で定義します。
アンダーバー「_」を前後に2つ記述します。
デストラクタ
__del__という名前のメソッドで定義します。
しかし、デストラクタは定義せずにガベージコレクションに任せる場合がほとんどです。
withを用いなければ完全に開放されないことがあります。
サンプル
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
class ClassName:
val = "public"
__val = "private"
def __init__(self):
self.__private_method(" called by constructor")
def public_method(self):
self.__private_method(" called by" + sys._getframe().f_code.co_name)
def __private_method(self, arg):
print(sys._getframe().f_code.co_name + arg)
def main():
instance = ClassName() # __private_method called by constructor
instance.public_method() # __private_method called bypublic_method
print(instance.val) # public
if __name__ == "__main__":
main()
継承
python継承の特徴
- 多重継承ができます。
- メソッドのオーバーライド(スーパークラスのメソッドをサブクラスで上書きする)ができます。
- 抽象クラスやインタフェース(下位クラスに実装を強制するような仕組み)はありません。
- オーバーロード(引数を変えて同名で定義する)ができません。
サンプル
class A:
def method(self):
print("class A")
class B:
def method(self):
print("class B")
class C(A):
def method(self):
print("class C")
class D(B,C):
pass
d = D()
d.method()