如何扩展现有的python实例

How to extend an existing python instance

我想把我的大脑包裹在这里…假设我有一个简单的类继承设置:

1
2
3
4
5
6
7
class SuperClass(object):
    def __init__(self):
        self.var = 1

class SubClass(SuperClass):
    def getVar(self):
        return self.var

如果我有一个现有的SuperClass实例,有没有一种方法可以在不创建新实例的情况下将其"强制"为SubClass


在python中,您没有cast运算符—您可以通过将类型分配给实例的__class__属性来绕过此问题:

1
2
3
4
>>> super_instance = SuperClass()
>>> super_instance.__class__ = SubClass
>>> print super_instance.getVar()
1

但是,在许多其他语言中,这比cast更容易出错,因为编译器没有验证"cast的有效性和安全性。

例如,如果SubClass有一个方法访问了SuperClass上不可用的属性,那么尝试在super_instance上调用该方法将导致运行时出错,即使它似乎是SubClass的有效实例。