Python:如何将对象从基类提升到派生类?
希望这个问题不是太基础,但我想问一下……
假设我有一个基础类叫做 pa(),然后我有一些派生类,比如 pai()、paj() 等等,这些类都是从基础类继承来的。
我想从基础类 pa() 创建一个对象:
>>> from pamod import *
>>> mypa = pa()
>>> mypa
<pamod.pa object at 0x28d4fd0>
>>>
……然后根据某些操作,把这个对象提升(转换)成一个派生类的对象:
>>> mypa.do(this)
>>> mypa
<pamod.pai object at 0x28d4fd0>
>>>
在这里,根据“this”的值,mypa 变成了 pai 类的一个对象,等等。
我知道我可以给这个对象的 __class__
赋值。
mypa.
__class__
= pai
不过我在想,这样做是否真的是最好的方法。
在我的设想中,每个 pai 的实例(比如说)都是从基础类 pa 开始的,所以我猜 pai 的 __init__
方法可以以某种方式被重载。
可以参考这个讨论。
彼得
2 个回答
0
我不太明白。看起来重新指定 __class__
可以让我不必把所有东西都复制一遍,这很好,因为我们说的是一大堆(几百兆字节)的数据。
(我在这里回答我自己的问题,这样我可以包含代码)
这有什么问题吗?实际上,“x”和“y”可能代表着一些庞大的数据。调用 mypa.do(1) 会把 mypa 提升为 pai 类的一个成员:
class pa(object):
def __init__(self):
self.x = 1.0
def do(self,i):
if i==1:
self.__class__ = pai
self.promote()
class pai(pa):
def __init__(self):
pa.__init__(self)
self.promote()
def promote(self):
self.y = 2.0
4
这个方法不好,因为你需要自己去处理新属性的初始化。可以在子类里写一个类方法,这个方法会返回一个新的实例,并把合适的属性复制过来。