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()

関連ページ