Python将自身改为继承类

2024-06-16 12:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的结构:

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的一个实例
现在我想通过使用方法“changetogo”将它更改为Goo的一个实例,并添加其他值。在

在Python中如何做到这一点?在

我试过:

^{pr2}$

但当我检查:

type(a)

还是福,不是咕。在


Tags: 实例方法selffooinitdef结构class
2条回答

在Python2中,使Fooobject继承以使其成为一个新样式的类:

>>> class Foo(object):
...     def __init__(self, val1):
...         self.val1 = val1
... 
>>> class Goo(Foo):
...     def __init__(self, val1, val2):
...         super(val1)
...         self.val2 = val2
... 
>>> f=Foo(1)
>>> f.__class__
<class '__main__.Foo'>
>>> f.__class__ = Goo
>>> f
<__main__.Goo object at 0x10e9e6cd0>
>>> type(f)
<class '__main__.Goo'>

现在你可以改变self.__class__。在changeToGoo()方法中:

^{pr2}$

或重复使用__init__

def changeToGoo(self)
    self.__class__ = Goo
    self.__init__(self.val1, 'some value')

这确实使你的对象有点怪异,因为它们改变了身份。变形很少是个好主意。您可能需要重新考虑您的用例。在

你可以:

def changeToGoo(self, val2):
    return Goo(self.val1, val2)

然后调用并赋值,添加额外的属性

^{pr2}$

相关问题 更多 >