Python:在运行时绑定子类
有没有人能告诉我,怎么在运行时绑定到特定的子类?在下面的例子中,我希望 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__