優雅さと優雅さを備えた Python での複数のコンストラクターの実装
ただし、Python は 1 つのメソッド内で複数の init 関数を明示的にサポートしていない可能性があります。クラスでは、この機能をクリーンな Python クラスで実現する別のアプローチがあります。この問題を説明するために、number_of_holes プロパティを持つ Cheese クラスを考えてみましょう。指定されたホール カウントまたはランダム化された値のいずれかを使用してインスタンスを作成したいと考えています。
デフォルト引数アプローチ1 つのアプローチには、コンストラクターのデフォルト引数を利用することが含まれます。引数が指定されない場合、穴数はデフォルトの 0 になり、固形チーズを表します。ただし、これでは複数の個別のコンストラクターは許可されません。
class Cheese: def __init__(self, num_holes=0): if num_holes == 0: # Randomize number_of_holes else: number_of_holes = num_holes
より洗練されたソリューションでは、ファクトリ メソッドとして知られるクラス メソッドを利用します。これらのメソッドは代替コンストラクターとして機能し、さまざまな初期化ロジックを持つ複数の独立した「コンストラクター」を可能にします。
Cheese クラスの場合、さまざまな程度の穴あきのチーズを生成するクラス メソッドを作成できます。
これらのクラス メソッドを使用してインスタンスを作成できるようになりました。
class Cheese(object): def __init__(self, num_holes=0): 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() # Creates a solid cheese emmentaler = Cheese.random() # Creates a cheese with a random hole count leerdammer = Cheese.slightly_holey() # Creates a cheese with a slightly holey structure
以上がPython で複数のコンストラクターを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。