Python - オブジェクトとクラス

クラス

Python の クラス (class) は次のように定義します。クラス名は慣習的に大文字で始めます。

class MyClass:
    """A simple example class""" # ドキュメントストリング

    def __init__(self):          # コンストラクタ
        self.name = ""

    def getName(self):           # getName()メソッド
        return self.name

    def setName(self, name):     # setName()メソッド
        self.name = name

a = MyClass()                    # クラスのインスタンスを生成
a.setName("Tanaka")              # setName()メソッドをコール
print(a.getName())               # getName()メソッドをコール
Python の クラス (class)

クラス変数とインスタンス変数

クラスは、インスタンス変数クラス変数を持つことができます。インスタンス変数は「インスタンス.変数名」で表され、インスタンス毎に独立の変数です。

class MyClass:
    def __init__(self):
        self.name = "" # インスタンス変数

a1 = MyClass()
a1.name = "Tanaka"

a2 = MyClass()
a2.name = "Suzuki"

print(a1.name)         # Tanaka
print(a2.name)         # Suzuki
インスタンス変数

クラス変数は「クラス名.変数名」で表され、すべてのインスタンスで共通の変数です。

class MyClass:
    PI = 3.14     # クラス変数

print(MyClass.PI) # 3.14
クラス変数

ただし、インスタンス変数が存在しない場合、「インスタンス.変数名」はクラス変数を参照します。「インスタンス.変数名」に値を代入した時点でインスタンス変数が生成され、以降はインスタンス変数が参照されます。

class MyClass:
    PI = 3.14

a1 = MyClass()

print(a1.PI)     # クラス変数 MyClass.PI(3.14) が参照される
a1.PI = 3.141593 # インスタンス変数 a1.PI が生成される
print(a1.PI)     # インスタンス変数 a1.PI(3.141593) が参照される
クラス変数とインスタンス変数

メソッド

クラスが持つ関数はメソッドと呼びます。メソッドは、どこからでも参照可能です。メソッドの第一引数にはクラスのインスタンスを指定し、第二引数以降でメソッドの引数を受け取ります。

class MyClass:
    name = ""
    def setName(self, name): # 第一引数は自インスタンス(self)
        self.name = name

a = MyClass()
a.setName("Tanaka")
メソッド

アクセス制限

Python では privateprotected などのアクセス修飾子はサポートされていません。アンダーバー _ で始まる変数や関数は外から参照しない慣習的なルールがあります。アクセス制限を行う場合はアンダーバー 2 個 __ で始まる変数や関数は参照が制限されます。

class MyClass:
    def __init__(self):
        self.name = "tanaka"
        self._name = "yamada"
        self.__name = "suzuki"

    def hello(self): print 'hello'
    def _hello(self): print 'hello'
    def __hello(self): print 'hello'

a = MyClass()

print(a.name)           # 参照できる
print(a._name)          # 参照できるが慣習的に参照しない
# print a.__name        # 参照できない(AttributeError例外)

a.hello()               # 参照できる
a._hello()              # 参照できるが慣習的に参照しない
# a.__hello()           # 参照できない(AttributeError例外)
アクセス制限

関連記事

  1. 基本
  2. 変数・数値・文字列
  3. リスト・タプル・辞書・集合
  4. 関数
  5. オブジェクト指向
Category:
プログラミング
公開日:
更新日:
Pageviews:
407
Shares:
1
Tag:
Python