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

问题描述 投票:1回答:1

如果我有两个A和B类,有没有办法让A类的实例“跳”到B类,反之亦然?

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.