これに対する明確な答えは見つかりません。私の知る限り、__init__
Python クラスに複数の関数を含めることはできません。では、この問題をどのように解決すればよいのでしょうか?
Cheese
プロパティを持つ というクラスがあるとしますnumber_of_holes
。チーズ オブジェクトを作成する 2 つの方法をどのように用意すればよいでしょうか...
- 次のような穴をいくつか開けるものです
parmesan = Cheese(num_holes=15)
。 - 引数を取らずにプロパティをランダム化するだけのもの
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()