Pas*_*sha 4 python oop class self superclass
我有这种结构:
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()
Run Code Online (Sandbox Code Playgroud)
'a'现在是Foo的一个实例,
现在我想通过使用方法"changeToGoo"将其更改为Goo的实例,并添加其他值.
如何在Python中完成?
我试过了:
self.__class__ = Goo
Run Code Online (Sandbox Code Playgroud)
但当我检查:
type(a)
Run Code Online (Sandbox Code Playgroud)
它仍然是Foo,而不是Goo.
在Python 2中,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'>
Run Code Online (Sandbox Code Playgroud)
现在你可以改变self.__class__.在一个changeToGoo()方法中:
def changeToGoo(self)
self.__class__ = Goo
self.val2 = 'some value'
Run Code Online (Sandbox Code Playgroud)
或重复使用__init__:
def changeToGoo(self)
self.__class__ = Goo
self.__init__(self.val1, 'some value')
Run Code Online (Sandbox Code Playgroud)
这确实使你的对象有点怪异,因为它们改变了身份.变形很少是一个好主意.您可能想重新考虑您的用例.
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |