私は基本クラスのインスタンスを持っており、それをこの基本クラスの子クラスのインスタンスにしたいと考えています。たぶん私は間違ったやり方で問題を抱えており、OOPで理解できなかった重要なことがあります。コードは説明のためだけにあり、非常に異なるアプローチを提案することができます。どんな助けもありがたい。継承:基本クラスインスタンスを子クラスインスタンスに変換する
class Car(object):
def __init__(self, color):
self.color = color
def drive(self):
print "Driving at 50 mph"
class FastCar(Car):
def __init__(self, color, max_speed=100):
Car.__init__(self, color)
self.max_speed = max_speed
def drive_fast(self):
print "Driving at %s mph" %self.max_speed
one_car = Car('blue')
# After the instanciation, I discovered that one_car is not just a classic car
# but also a fast one which can drive at 120 mph.
# So I want to make one_car a FastCar instance.
私は非常によく似た質問を参照してください、しかし、答えのどれも私の問題に合っていない:
私は速く運転する方法を知っているだろう車の周りFastCarラッパーを作成する必要はありません。私は本当にFastCarがCarを拡張することを望んでいる。 (:
def __new__(cls, color, max_speed=100, baseclassinstance=None)
例)は、私は本当に
__new__
は車の新しいインスタンスまたは私はそれに与えたインスタンスを返すことがある場合は、引数にいくつかのテストを行い、決定するFastCarで__new__
メソッドを使用する必要はありません。
なぜあなたはどうしますか?one_car = FastCar(one_car.color、120)?それは本当に遺産ではありませんが、うまくいくはずです。 – Bogdan
あなたのOOPデザインはちょっとしたようです。私はFastCarもdrive()を実装すると思いますが、より速い速度(drive_fastとして実装したもの)でそうするでしょう。あなたが今持っているものでは、呼び出し元は、同じメソッドを呼び出すのではなく、そのメソッドを適切に実装する(良い)のではなく、呼び出すメソッドを知るために型を知っている必要があります。また、FastCarクラスの最後に 'drive = drive_fast'を追加するだけで、これを行うことができます。 – PaulMcG
より良い例: 'FastCar'は' drive_fast'メソッドを持たず、 'Car'のために存在しない' overtake'メソッドです。 – Andy