Python のクラス定義と使い方

ここでは Python のクラス定義と使い方についてご説明します。

Python でクラスを定義する

Python でクラスを定義するには class キーワードを使って次のように定義します。

class クラス名:
    クラスの内容(変数やメソッドなど)

クラス名の命名規則はパスカルケースで、ClassName のように単語の最初の文字を大文字にします。


例えば、Person という人を表すクラスを定義してみましょう。

Person クラスの内容として、name(名前)と age(年齢)という変数と、"Hello, I'm [名前]!" と出力する say_hello() というメソッドを定義したい時は、次のようにできます。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def say_hello(self):
        print(f"Hello, I'm {self.name}!")

__init__() メソッドはクラスのインスタンス(オブジェクト)が生成される時に自動的に実行される特別なメソッド(コンストラクタ)で、クラス変数に初期値を代入するなど、クラスに必要な初期化を行うことができます。

__init__() メソッドの最初の引数の self は必須で、そのインスタンス自体への参照で自動的に渡されます。

self 引数の後に、クラスのオブジェクト生成する時に渡したい引数を指定します。

その __init__() メソッドの中で name というクラス変数(self.name) に引数で渡された name を、age というクラス変数(self.age) に引数で渡された age を代入しています。


クラスメソッドの say_hello() は、メソッドを実行する際に何も渡したい引数はないので、引数は self だけです。

先ほどと同様に self は自動的に渡されるので、引数に self を指定しないとエラーになります。

self. でインスタンスのクラス変数にアクセスすることができ、ここでは self.name でクラス変数の name の値にアクセスしています。


Python のクラスの使い方

Python でクラスを使うには、まずクラスオブジェクトを生成(インスタンス化)します。

そして、クラスの変数やメソッドを使うには「クラスオブジェクトの変数名.クラス変数名」「クラスオブジェクトの変数名.クラスメソッド名()」のようにドットを使って利用できます。


では、先ほど定義した Person クラスを使ってみましょう。

Person クラスのオブジェクトを生成して、クラス変数にアクセスしたり、メソッドを実行するには次のようにします。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def say_hello(self):
        print(f"Hello, I'm {self.name}!")


person1 = Person("Ryota", 20)

print(person1.name, person1.age)
person1.say_hello()

実行結果は次のようになります。

Ryota 20
Hello, I'm Ryota!

まず Person() クラスのコンストラクタに name に "Ryota" を、age に 20 を渡して、person1 という名前の Person オブジェクトを作っています。

person1.name、person1.age で、それぞれクラス変数に入っている name と age の値が取得できていますね。

また、person1.say_hello() で print(f"Hello, I'm {self.name}!") が実行され、Hello, I'm Ryota! と出力されています。

person2 という別の Person クラスのオブジェクトを生成して、say_hello() メソッドを実行してみます。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, I'm {self.name}!")


person1 = Person("Ryota", 20)
person1.say_hello()

person2 = Person("Sayaka", 15)
person2.say_hello()

実行結果は次のようになり、それぞれコンストラクタで指定した name でメッセージが出力されています。

Hello, I'm Ryota!
Hello, I'm Sayaka!

このように、Person クラスを定義して使うことで、人の情報をもったオブジェクトを必要に応じて生成して使うことができます。


Python のクラス変数の値を変更する

Python のクラス変数を「 self.変数名 」のように定義した時、その変数はクラスの外からも値が変更できるクラス変数になります。

そのようなクラス変数の値を変更したい時には「クラスオブジェクトの変数名.クラス変数名 = 新しい値」のように値を代入できます。

例えば、先ほどの person1 オブジェクトの age を変更したい時は次のようにします。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, I'm {self.name}!")


person1 = Person("Ryota", 20)
print(person1.age)

person1.age = 21
print(person1.age)

実行結果は次のようになり、person1.age の値が 21 に変更されていますね。

20
21

以上、Python のクラス定義と使い方についてご説明しました。

© 2024 やさしい Python 入門