Python:如何将对象从基类提升为派生类?

时间:2010-10-28 23:23:53

标签: 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__方法可能会以某种方式超载。

请参阅 this 讨论

彼得

2 个答案:

答案 0 :(得分:5)

这是一种糟糕的方法,因为您必须自己处理新属性的初始化。在子代码中编写一个类方法,该方法返回一个新实例,并复制相应的属性。

答案 1 :(得分:0)

我不明白。似乎重新分配__class__使我不必复制所有内容,这很好,因为我们正在谈论一个巨大的(100的MiB)数据量。

(我在这里回答我自己的问题所以我可以包含代码)

这有什么问题?实际上,“x”和“y”可能代表了大量的数据。调用mypa.do(1)将mypa提升为班级成员:

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
相关问题