Python:在运行时绑定子类

0 投票
2 回答
527 浏览
提问于 2025-04-15 14:22

有没有人能告诉我,怎么在运行时绑定到特定的子类?在下面的例子中,我希望 mCar 这个实例根据命令行的选项,指向 Truck 类或者 Compact 类。

class Car(object):
    pass

class Truck(Car):
    pass

class Compact(Car):
    pass

还有一个 Car 的实例

mCar = Car()

2 个回答

1

顺便提一下,虽然不太推荐,但确实可以给 self.__class__ 赋一个不同的值——无论是在 __init__ 方法里还是其他地方。需要注意的是,这样做会改变类级别名称的查找(比如方法),但本身并不会改变实例的状态(也不会隐式地调用任何初始化——如果你需要初始化,得自己明确地去做)。这些细微之处就是为什么不太推荐这种技巧的原因之一(还有Python程序员普遍对“黑魔法”的反感;-))。通常推荐的做法是使用“工厂函数”(在特别简单的情况下,可以简化为字典查找,就像GHZ的回答中提到的那样)。

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__

撰写回答