Python クラス ファクトリ

Vaibhhav Khetarpal 2023年6月21日
  1. Python でクラス ファクトリを作成する方法
  2. class キーワードを使用して Python でクラス ファクトリを作成する
  3. type キーワードを使用して Python でクラス ファクトリを作成する
Python クラス ファクトリ

クラスを作成してそれを返すことを目的とする単純な関数は、クラス ファクトリと呼ばれます。 強力なパターンの 1つであるクラス ファクトリは、Python で広く使用されています。

このチュートリアルでは、クラス ファクトリを作成するために使用できるさまざまな方法を示します。

Python でクラス ファクトリを作成する方法

クラス ファクトリを設計するには 2つの方法があります。 1つはコーディング時にクラスを作成し、もう 1つは実行時にクラスを作成します。

前者は class キーワードを使用し、後者は type キーワードを使用します。 これらの方法は両方とも、以下の記事で説明され、対比されています。

class キーワードを使用して Python でクラス ファクトリを作成する

class キーワードを使用してクラス ファクトリを作成できます。 このためには、関数を作成し、関数の定義内にクラスを保持する必要があります。

次のコードは、class キーワードを使用して、Python でクラス ファクトリを作成します。

def ballfun():
    class Ball(object):
        def __init__(self, color):
            self.color = color

        def getColor(self):
            return self.color

    return Ball


Ball = ballfun()
ballObj = Ball("green")
print(ballObj.getColor())

上記のコードは、次の出力を提供します。

green

type キーワードを使用して Python でクラス ファクトリを作成する

type キーワードを使用すると、クラスを動的に作成できます。 Python でクラス ファクトリを作成するには、type キーワードを使用する必要があります。

ただし、type キーワードを使用すると、関数は名前空間のみに残り、クラスと一緒になることに注意してください。

次のコードは、type キーワードを使用して、Python で動的クラスを作成します。

def init(self, color):
    self.color = color


def getColor(self):
    return self.color


Ball = type(
    "Ball",
    (object,),
    {
        "__init__": init,
        "getColor": getColor,
    },
)
ballGreen = Ball(color="green")
print(ballGreen.getColor())

上記のコードは、次の出力を提供します。

green

type キーワードを使用すると、実行時に動的なクラスと効果的な作成が可能になりますが、欠点もあります。 上記のコードでわかるように、init 関数と getColor 関数の両方が名前空間に散らかっています。

さらに、動的クラスが type キーワードを使用して作成されると、これらの関数の再利用の可能性も失われます。

これに対する簡単な解決策は、クラス ファクトリの導入です。 コード内の混乱を減らし、関数の再利用性を促進するため、両方の方法で役立ちます。

次のコードは、type キーワードを使用して、Python でクラス ファクトリを作成します。

def create_ball_class():
    def init(self, color):
        self.color = color

    def getColor(self):
        return self.color

    return type(
        "Ball",
        (object,),
        {
            "__init__": init,
            "getColor": getColor,
        },
    )


Ball = create_ball_class()
ballObj = Ball("green")
print(ballObj.getColor())

上記のコードは、次の出力を提供します。

green

クラス ファクトリを作成する方法を見てきましたが、新しく学んだクラス ファクトリの概念を使用する場合と使用しない場合を区別することも重要です。

一般に、クラス ファクトリは、コーディング時にどの属性が割り当てられるかがわからない場合に役立ちます。

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

関連記事 - Python Class