Python:在运行时绑定子类

时间:2009-09-16 19:17:45

标签: python class

在以下代码中,有人能告诉我如何在运行时绑定到特定的子类吗?我希望以下示例中的mCar实例根据命令行选项重定向到Truck或Compact类?

class Car(object):
    pass

class Truck(Car):
    pass

class Compact(Car):
    pass

Car

的实例
mCar = Car()

2 个答案:

答案 0 :(得分:4)

你的意思是这样吗?

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 :(得分:1)

作为旁注,虽然不是特别推荐,但可以为self.__class__分配不同的值 - 在__init__或其他任何地方。请注意,这将更改类级别名称(例如方法)的查找,但本身不会改变实例的状态(也不会无意中调用任何类型的初始化 - 如果需要,您必须明确地执行此操作那些微妙之处是为什么不特别推荐这些技巧的原因(以及Pythonistas对“黑魔法”的一般文化偏见;-)和“工厂功能”(在特别简单的情况下可以是减少到字典查找,如GHZ的答案中所推荐的方法。