Pythonプログラミングのクラスの基本

クラスの基本
目次

Pythonのクラス

ロボ君

クラスはオブジェクトを定義するための仕組みデス。

オブジェクトは属性とメソッドを持つデータ構造のことです。
クラスを定義することで、オブジェクトの属性やメソッドをまとめて管理することができます。

クラスの定義

クラスは、classキーワードを使用して定義します。
クラス名は、大文字で始め、単語と単語の間にキャメルケース(CamelCase)を使用する。
※キャメルケースは、単語を組み合わせたときに最初の単語を小文字、2つ目以降の単語の最初の文字を大文字にすることです。

class ClassName: #キャメルケース(CamelCase)を使用する
    # 属性とメソッドを定義する
ロボ君

クラスの定義では、属性とメソッドを定義できマス。

クラスの属性とメソッド

クラスには、属性とメソッドを定義することができます。
・メソッドは、オブジェクトの動作を表します。メソッドの定義にはdefを使います。
・属性は、オブジェクトの状態を表します。クラスの属性を表すにはself.を付けます。
クラスから生成された具体的なオブジェクトをインスタンスと呼びます。

# クラス
class Person:
    # メソッド
    def getName(self):
        # 属性
        return self.name
    def getAge(self):
        # 属性
        return self.age

メソッドはオブジェクトにドット演算子.を使って呼び出します。

person = Person() # インスタンスを生成
person.getName() # メソッドの呼び出し
コンストラクタ

コンストラクタは、クラスのインスタンスを作成する際に最初に呼び出されるメソッドです。
インスタンスに初期値を設定したり、インスタンスで使用するリソースを初期化したりするために使用されます。

コンストラクタは、クラスの定義で __init__(self, ...) という形式で定義します。
self は、インスタンス自身を表す予約語です。

例:次のコードは、名前と年齢を持つ人を表現するクラス Person を定義しています

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


person = Person("Real", 54)

print(person.name)
print(person.age)

# 実行結果
# Real
# 54

Person クラスのインスタンスを作成し、name age の属性を設定しています。

コンストラクタは、クラスの定義で、任意の数の引数を指定することができます。
例:次のコードは、名前、年齢、住所を持つ人を表現するクラス Person を定義しています。

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


person = Person("Real", 54, "123 Waka Street")

print(person.name)
print(person.age)
print(person.address)

# 実行結果
# Real
# 54
# 123 Main Street

このコードは、Person クラスのインスタンスを作成し、nameageaddress の属性を設定しています。

コンストラクタは、クラスのインスタンスを作成する際に、必ず呼び出されます。
コンストラクタを定義しない場合は、Pythonはデフォルトのコンストラクタを作成します。
デフォルトのコンストラクタは、インスタンスに初期値を設定しません。

クラス定義の具体例

クラスの定義

クラスの定義では、以下の要素を指定できます。

  • クラス名
  • 属性
  • メソッド
ロボ君

例1デス。

# クラス
class Person:
    # メソッド
    def getName(self):
        # 属性
        return self.name
        
    def getAge(self):
        # 属性
        return self.age
  • クラス名 _ Person
  • 属性 _ name,age
  • メソッド _ getName,getAge

クラスのインスタンス化

クラスを定義したら、インスタンス化することでクラスのインスタンスを生成することができます。

ロボ君

例2デス。

# インスタンスを生成
Real = Person()

Person()は、Personクラスをインスタンス化してRealオブジェクトを生成します。

メソッドの呼び出し

インスタンスを生成したら、演算子.を使って呼び出します。

ロボ君

例3デス。

# 属性に値を代入する
Real.name = "Real"
Real.age = 54#

# メソッドを呼び出す
name = Real.getName()
age = Real.getAge()

getNameメソッドとgetAgeメソッドを呼び出します。

ロボ君

例1+例2+例3デス↓

# クラス
class Person:
    # メソッド
    def getName(self):
        # 属性
        return self.name
        
    def getAge(self):
        # 属性
        return self.age

# インスタンスを生成
Real = Person()

# 属性に値を代入する
Real.name = "Real"
Real.age = 54#

# メソッドを呼び出す
name = Real.getName()
age = Real.getAge()

# 出力
print(name,age)

# 実行結果
# Real
# 54

クラスの継承

ロボ君

クラスは、他のクラスから継承することができマス。

class ChildClass(ParentClass):
    # 継承元のクラスの属性とメソッドを拡張する

継承することで、継承元のクラスの属性とメソッドを拡張することができます。

りある

ナイトクラスを継承してパラディンクラスになる的な?

ロボ君

クラス継承の例デス。

ChildClassクラスは、ParentClassクラスを継承しています。
ChildClassオブジェクトは、ParentClassオブジェクトの属性とメソッドをすべて利用できます。

class ParentClass:
    # 属性
    attr1 = 10
    # メソッド
    def method1(self):
        print("method1が呼び出されました")

class ChildClass(ParentClass):
    # 属性
    attr2 = "Hello, world!"
    # メソッド
    def method2(self):
        print("method2が呼び出されました:", self.attr2)

# ParentClassオブジェクトを生成
parent_class = ParentClass()

# ChildClassオブジェクトを生成
child_class = ChildClass()

# 1 _ParentClassオブジェクトの属性とメソッドを呼び出す
print(parent_class.attr1)
parent_class.method1()

# 2 _ChildClassオブジェクトの属性とメソッドを呼び出す
print(child_class.attr1)
child_class.method1()

# 3 _ChildClassオブジェクトの属性とメソッドを呼び出す
print(child_class.attr2)
child_class.method2()

上記コードの実行結果↓

# 1
10
method1が呼び出されました

# 2
10
method1が呼び出されました

# 3
Hello, world!
method2が呼び出されました: Hello, world!

実行結果 #1

ロボ君

「1 _ParentClassオブジェクトの属性とメソッドを呼び出す」の結果デス。

ParentClassオブジェクトの属性attr1は、10です。
ParentClassオブジェクトのメソッドmethod1()は、method1が呼び出されましたというメッセージを出力します。

実行結果 #2

ロボ君

「# 2 _ChildClassオブジェクトの属性とメソッドを呼び出す」の結果デス。

ChildClassオブジェクトは、ParentClassオブジェクトを継承しているため、ParentClassオブジェクトの属性とメソッドをすべて利用できます。
そのため、ChildClassオブジェクトの属性attr1も10です。
また、ChildClassオブジェクトのメソッドmethod1()ParentClassオブジェクトのメソッドmethod1()と同じように動作します。

実行結果 #3

ロボ君

「# 3 _ChildClassオブジェクトの属性とメソッドを呼び出す」の結果デス。

さらに、ChildClassオブジェクトは、独自の属性attr2とメソッドmethod2()を定義しています。
attr2の値は「Hello, world!」であり、method2()attr2の値を出力するメッセージを出力します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次