Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでクラスの属性とメソッドにアクセスする方法を徹底解説

Pythonはオブジェクト指向プログラミング言語であり、オブジェクトを中心とした設計思想を持っています。クラスはオブジェクトを生成するための設計図(ブループリント)であり、各クラスは複数の属性を持ちます。さらに、関数も属性としてクラスに持たせることが可能です。

クラスの属性へのアクセス

クラスの属性を確認したり操作したりする際には、Pythonに組み込まれている以下のメソッドが便利です。

  • getattr() — クラスの属性値を取得するための組み込み関数。

  • hasattr() — クラスやオブジェクトに指定した属性が存在するかどうかを真偽値で確認する組み込み関数。

  • setattr() — クラスに新しい属性を追加したり、既存の属性に値を設定したりするための組み込み関数。

次のプログラムでは、これらのメソッドを使ってクラスの属性にアクセスする方法を示しています。

コード例

class StateInfo:
    StateName = 'Telangana'
    population = '3.5 crore'

    def func1(self):
        print('Hello from my function')

# 属性の値を取得
print(getattr(StateInfo, 'StateName'))

# 属性が存在する場合は True を返す
print(hasattr(StateInfo, 'population'))

# 新しい属性を追加
setattr(StateInfo, 'ForestCover', 39)

print(getattr(StateInfo, 'ForestCover'))
print(hasattr(StateInfo, 'func1'))

実行結果

Telangana
True
39
True

クラスのメソッドへのアクセス

クラスのメソッドにアクセスするには、まずクラスをインスタンス化してオブジェクトを生成する必要があります。生成したオブジェクトから、インスタンスメソッドとしてメソッドを呼び出せます。self パラメータを通じて、インスタンスメソッドは同じオブジェクト上の属性や他のメソッドにもアクセスできます。

コード例

class StateInfo:
    StateName = 'Telangana'
    population = '3.5 crore'

    def func1(self):
        print('Hello from my function')

obj = StateInfo()
obj.func1()

実行結果

Hello from my function

別のクラスからメソッドにアクセスする

あるクラスのメソッドを別のクラスから呼び出したい場合は、呼び出される側のクラスを、呼び出す側のクラスに引数として渡します。以下の例では、ClassOneClassTwo のコンストラクタに渡し、その内部で ClassOne のインスタンスを生成して m_class1 メソッドを呼び出しています。

コード例

class ClassOne:
    def m_class1(self):
        print('Method in class 1')

# 呼び出す側のクラスを定義
class ClassTwo:
    def __init__(self, c1):
        self.c1 = c1

    # 呼び出し用のメソッド
    def m_class2(self):
        obj_inst = self.c1()
        obj_inst.m_class1()

# ClassOne を引数として ClassTwo に渡す
obj = ClassTwo(ClassOne)
obj.m_class2()

実行結果

Method in class 1

このように、Pythonでは組み込み関数を活用することで属性の取得・確認・設定を柔軟に行え、クラス間でインスタンスを受け渡すことで他クラスのメソッドも簡単に利用できます。

  1. Pythonでクラスの属性を定義・確認する方法をわかりやすく解説

    クラスの属性とはPythonでは、ほぼすべてのものがオブジェクトとして扱われます。そして、すべてのオブジェクトには属性(アトリビュート)とメソッドが備わっています。つまり、属性はPythonプログラミングにおいて非常に基礎的かつ重要な概念なのです。クラスとは、類似したオブジェクトをまとめて扱うための仕組みであり、クラス自体にも属性を持ちます。ここで注意したいのが、クラス属性とインスタンス属性の違いです。クラス属性は、そのクラスから生成されたすべてのインスタンス間で共有されます。しかし、その逆(インスタンス属性が他のインスタンスやクラスに共有される)は成り立ちません。dir関数でオブジェクトの属

  2. 【初心者向け】Pythonクラスのselfと__init__メソッドの違いをわかりやすく解説

    selfとは「self」は、クラスのインスタンス(実体)そのものを表すために使われる特別な引数です。Pythonでは、この「self」キーワードを通じて、クラス内の属性(変数)やメソッド(関数)にアクセスします。インスタンスメソッドを呼び出す際、Pythonは自動的にそのインスタンス自身を第1引数として渡してくれるため、呼び出し側で明示的に指定する必要はありません。__init__メソッドとは「__init__」は、Pythonクラスにあらかじめ用意されている予約済み(特殊)メソッドの一つです。オブジェクト指向プログラミングの用語では「コンストラクタ」と呼ばれます。このメソッドは、クラスからオ