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

Python: How do I promote an object from a base class to a derived class?

希望这不是太基本,但是…

假设我有一个基类pa(),并且我有从基类继承的派生类pa i()、paj()等。

我想从基类pa()实例化一个对象:

1
2
3
4
5
>>> from pamod import *
>>> mypa = pa()
>>> mypa
<pamod.pa object at 0x28d4fd0>
>>>

…然后根据一些操作将其提升(强制转换)到派生类:

1
2
3
4
>>> mypa.do(this)  
>>> mypa
<pamod.pai object at 0x28d4fd0>
>>>

其中,基于"this"的值,mypa成为类pai等的对象。

我知道我可以分配给对象的__class__

mypa.__class__ = pai

< /块引用>< /块引用>

不过,我想知道这是否是最好的方法。

在我的计划下,pai的每个实例(比如)都会作为基类pa的实例开始生命,所以pai的__init__方法可能会以某种方式过载,我猜。

见这讨论。

彼得


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


我不明白。似乎重新分配EDOCX1[0]使我不必复制所有内容,这很好,因为我们谈论的是大量(100个mib)数据。

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

这是怎么回事?实际上,"x"和"y"可能代表大量的数据。调用mypa.do(1)将mypa提升为pai类成员:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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