如何更改对象类和相关函数

时间:2017-12-20 05:25:40

标签: python class methods

如果我有2个A和B类,有没有办法可以创建A类和#34;跳跃"到B级,反之亦然?

我想为A类编写一个函数,当调用它时,它实质上使得A类的实例作为B类对象重新初始化,并继续执行它作为B类的正常实例。我想为B班做类似的功能。这可能吗?

1 个答案:

答案 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我们爱你,呃,我想是的......这很奇怪。但很酷,是吗?

如何自己尝试实验,看看如何保留原始类的属性!它很整洁。