Python: связать дочерний класс во время выполнения - PullRequest
0 голосов
/ 16 сентября 2009

Может кто-нибудь сказать мне, как привязать к определенному дочернему классу во время выполнения в следующем коде? Я хочу, чтобы экземпляр mCar в следующем примере перенаправлял на класс Truck или Compact в соответствии с параметрами командной строки?

class Car(object):
    pass

class Truck(Car):
    pass

class Compact(Car):
    pass

и экземпляр Car

mCar = Car()

Ответы [ 2 ]

4 голосов
/ 16 сентября 2009

Вы имеете в виду, как это?

car_classes = {
'car'     : Car,
'truck'   : Truck,
'compact' : Compact
}

if __name__ == '__main__':
    option = sys.argv[1]
    mCar = car_classes[option]()
    print 'I am a', mCar.__class__.__name__
1 голос
/ 17 сентября 2009

В качестве дополнительного примечания, хотя это и не рекомендуется, МОЖНО назначить другое значение для self.__class__ - будь то в __init__ или где-либо еще. Обратите внимание, что это изменит поиск имен на уровне класса (например, методов), но по сути это не изменит состояния экземпляра (и не будет вызывать неявный вызов любого рода инициализации - вам придется делать это явно, если вам нужно что должно произойти) ... эти тонкости являются частью того, почему такие уловки не особенно рекомендуются (наряду с общим культурным уклоном Pythonistas против "черной магии" ;-) и "фабричной функцией" (которая в особенно простых случаях может быть сводиться к поиску разборчивых, как в ответе GHZ) - рекомендуемый подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...