我正在尝试将我的大脑包裹在这里...让我们说我有一个简单的类继承设置:
class SuperClass(object):
def __init__(self):
self.var = 1
class SubClass(SuperClass):
def getVar(self):
return self.var
如果我有SuperClass
的现有实例,是否可以将其“投射”为SubClass
,而无需创建新实例?
答案 0 :(得分:2)
在Python中,您没有cast
运算符 - 您可以通过将类型分配给实例的__class__
属性来解决此问题:
>>> super_instance = SuperClass()
>>> super_instance.__class__ = SubClass
>>> print super_instance.getVar()
1
但是,在许多其他语言中,这比cast
更容易出错,因为编译器未验证“cast
”的有效性和安全性。
例如,如果SubClass
有一个方法访问了SuperClass
上没有的属性,那么尝试在super_instance
上调用该方法会导致运行时出错,即使出现是SubClass
的有效实例。