如果我有2个A和B类,有没有办法可以创建A类和#34;跳跃"到B级,反之亦然?
我想为A类编写一个函数,当调用它时,它实质上使得A类的实例作为B类对象重新初始化,并继续执行它作为B类的正常实例。我想为B班做类似的功能。这可能吗?
答案 0 :(得分:2)
令人惊讶的是,是的。
>>> class C: pass
...
>>> c = C()
>>> type(c)
<class '__main__.C'>
>>> c.__class__
<class '__main__.C'>
>>>
>>>
>>> class D: pass
...
>>> c.__class__ = D
>>> c.__class__
<class '__main__.D'>
>>> type(c)
<class '__main__.D'>
我使用Python 3.6.3来做到这一点。
想看到跳跃的动作?看看这个:
>>> class C:
... def speak(self):
... return "I'm a C"
...
>>> class D:
... def shout(self):
... return "I'M A D"
...
>>> c = C()
>>> c.speak()
"I'm a C"
>>> c.__class__ = D
>>> c.shout()
"I'M A D"
Python我们爱你,呃,我想是的......这很奇怪。但很酷,是吗?
如何自己尝试实验,看看如何保留原始类的属性!它很整洁。