【发布时间】:2014-01-10 10:37:29
【问题描述】:
我有这种结构:
class Foo:
def __init__(self, val1):
self.val1 = val1
def changeToGoo(self)
HOW???
class Goo(Foo):
def __init__(self, val1, val2):
super(val1)
self.val2 = val2
a = Foo(1)
a.changeToGoo()
'a' 现在是 Foo 的一个实例
现在我想通过使用“changeToGoo”方法将其更改为 Goo 的实例,并添加其他值。
如何在 Python 中做到这一点?
我试过了:
self.__class__ = Goo
但是当我检查时:
type(a)
它仍然是 Foo,而不是 Goo。
【问题讨论】:
-
您要解决的实际问题是什么?
-
请详细说明您为什么要这样做。
-
您永远不需要将超类强制转换为其子类之一,这是设计缺陷的标志。
-
@SimeonVisser 这不是真的。特别是,它可能适用于反序列化等过程。
-
@SimeonVisser 不,实例化一次然后强制执行是有意义的。显然,这取决于格式和环境的限制。在 C++ 中更常见的是这样做(就地使用
new),但同样的原因也适用于 Python。我敢打赌它们不适用于 OP 的问题,但这不是“从不”的事情。
标签: python class oop superclass self