Python 如何更改对象类和关联函数

Python 如何更改对象类和关联函数,python,class,methods,Python,Class,Methods,如果我有两个类A和B,有没有一种方法可以使类A的实例“跳转”到类B,反之亦然 我想为类a编写一个函数,当调用该函数时,它基本上会使类a的实例重新初始化为类B对象,并像类B的正常实例一样继续执行。我想为B类做一个类似的函数。这可能吗?令人惊讶的是,是的 >>> class C: pass ... >>> c = C() >>> type(c) <class '__main__.C'> >>> c.__class_

如果我有两个类A和B,有没有一种方法可以使类A的实例“跳转”到类B,反之亦然

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

令人惊讶的是,是的

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


不如自己做一个实验,看看如何从原始类中保留属性!它很整洁。

看起来像是代码气味。你能发布你的课程并解释你想要达到的目标吗?我不喜欢,但我想不出其他的方法。我还没有创建文件,但我正在构建一个自动捕获旗帜的游戏。每支球队都有两名经纪人,一名防守球员和一名进攻球员,当其中一名球员死亡时,我希望他们的角色能够转换。这似乎是一种解决办法,这是一种气味。角色是对象的属性,应该在运行时分配。不同角色允许的行为可以通过对象组合进行管理,也可以滚动您自己的函数表。这对于
class
IMHO来说确实不是一个很好的用途。但其他人可能不同意。
>>> 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"