我有一個基類的實例,然後我想使它成爲此基類的子類的實例。也許我以一種錯誤的方式解決問題,在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;
我真的不希望使用FastCar的
__new__
方法做出的論點一些測試,並決定是否__new__
必須返回車的新實例或者我給它的實例(例如:def __new__(cls, color, max_speed=100, baseclassinstance=None)
)。
爲什麼你不這樣做:one_car = FastCar(one_car.color,120)?這不是真正的繼承或什麼,但應該工作。 – Bogdan
您的OOP設計看起來有點不合適。我會想象FastCar也會實現drive(),但是會以更高的速度執行(你已經實現了drive_fast)。用你現在擁有的東西,調用者必須知道類型以知道調用哪個方法(壞),而不是調用相同的方法,並讓各種類型適當地實現該方法(良好)。您也可以通過在FastCar類的末尾添加'drive = drive_fast'來完成此操作。 – PaulMcG
好的。一個更好的例子:'FastCar'沒有'drive_fast'方法,但是'overtake'方法不存在'Car'。 – Andy