ここで私が解決しようとしているコーディングの問題は...私は基本クラスを持っています、Animalと言うと、DogクラスとCatクラスという2つのサブクラスがあります。私のクラスAnimalには、makeとbabyの両方が継承するメソッドmake_baby()があります。私が問題を解決するのに苦労しているのは、戻り値を関数を呼び出すサブクラスの新しいインスタンスにしたいが、異なる属性値を持つ、つまりDog.make_baby()は新しいDogとCat.make_baby( )は新しい猫を返します。Pythonクラス:基本クラスのメソッドでの変数サブクラスの作成
以前は "type(self)()"を返そうとしましたが、type()はクラスではなく型オブジェクトを返すので、これは良くありません。ここで
は、完全なサンプルコードです:アイデアはメソッドが返さ以外まったく同じであるということですので、
Class Animal():
def __init__(self, color):
self.color = color
def make_baby():
new_color = rand_color # a randomly chosen color
return #??? new class of the same type that called the method
Class Dog(Animal):
def pet():
print '*pant*'
Class Cat(Animal):
def pet():
print 'purrr'
だから私は犬と猫のためのmake_baby()メソッドを書き込まないようしたいのですがクラス。また、Animalにいくつかのサブクラスを作成したいので、if文をたくさん避けたいと思います。
ありがとう!これは実際に私の実際のコードが型(self)(...)の使用に取り組んでいたので実際にはうんざりしていましたが、それは不可解に機能しなくなりました。私はそれが私の基底クラスがもともとリストのサブクラスであったので、私はそれを削除し、親クラスなしでそれを残したので意味がないと判断したことに気づいた。私はオブジェクトを親クラスとして追加し、それは再び動作します!あなたが作った@classmethodの提案で遊ぶつもりです。それは滑らかなアイデアのようです。再度、感謝します。 – ampron
インスタンスが必要な場合、クラスメソッドは適切ではありません。遺伝学が関与する場合。そのような場合は、動的なタイピングによって、瞬きを防ぐ自然な方法はありません。何を言っているのか忘れてしまいます。 –
@KarlKnechtel:あなたはPythonのよく知られた "f \ * ck typing"を参照しているに違いありません。 – kindall