我有这样的结构:
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()
‘’现在是Foo的一个实例
现在,我希望通过使用"changeToGoo“方法将其更改为Goo的一个实例,并添加其他值。
如何在Python中做到这一点?
我试过:
self.__class__ = Goo
但当我查到:
type(a)
它仍然是福,而不是咕。
发布于 2013-12-21 19:28:53
在Python2中,让Foo
继承object
,使其成为一个新样式的类:
>>> 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()
方法中:
def changeToGoo(self)
self.__class__ = Goo
self.val2 = 'some value'
或者重复使用__init__
def changeToGoo(self)
self.__class__ = Goo
self.__init__(self.val1, 'some value')
这确实会使您的对象变得有些可怕,因为它们会改变身份。变形很少是个好主意。您可能需要重新考虑您的用例。
发布于 2013-12-21 19:29:39
你可以这样做:
def changeToGoo(self, val2):
return Goo(self.val1, val2)
然后调用和分配,添加额外的属性
a = a.changeToGoo(val2)
https://stackoverflow.com/questions/20722714
复制相似问题