複数のコンストラクタを実装するためのクリーンな「Python 的」な方法は何ですか? 質問する

複数のコンストラクタを実装するためのクリーンな「Python 的」な方法は何ですか? 質問する

これに対する明確な答えは見つかりません。私の知る限り、__init__Python クラスに複数の関数を含めることはできません。では、この問題をどのように解決すればよいのでしょうか?

Cheeseプロパティを持つ というクラスがあるとしますnumber_of_holes。チーズ オブジェクトを作成する 2 つの方法をどのように用意すればよいでしょうか...

  1. 次のような穴をいくつか開けるものですparmesan = Cheese(num_holes=15)
  2. 引数を取らずにプロパティをランダム化するだけのものnumber_of_holes:gouda = Cheese()

これを行う方法は 1 つしか思いつきませんが、これは扱いにくいようです。

class Cheese:
    def __init__(self, num_holes=0):
        if num_holes == 0:
            # Randomize number_of_holes
        else:
            number_of_holes = num_holes

どう思いますか?別の方法はありますか?

ベストアンサー1

num_holes=Noneだけを使用する場合は、 をデフォルトとして使用しても問題ありません__init__

複数の独立した「コンストラクタ」が必要な場合は、次のように提供できます。クラスメソッドこれらは通常、ファクトリー メソッドと呼ばれます。 この場合は、 のデフォルトを使用できnum_holesます0

class Cheese(object):
    def __init__(self, num_holes=0):
        "defaults to a solid cheese"
        self.number_of_holes = num_holes

    @classmethod
    def random(cls):
        return cls(randint(0, 100))

    @classmethod
    def slightly_holey(cls):
        return cls(randint(0, 33))

    @classmethod
    def very_holey(cls):
        return cls(randint(66, 100))

次に、次のようなオブジェクトを作成します。

gouda = Cheese()
emmentaler = Cheese.random()
leerdammer = Cheese.slightly_holey()

おすすめ記事