기본 클래스의 인스턴스가 있고이 인스턴스를이 기본 클래스의 자식 클래스의 인스턴스로 만들고 싶습니다. 어쩌면 나는 잘못된 방식으로 문제를 해결할 것이고 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'에는 존재하지 않는'추월'메소드입니다. – Andy