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

2024-10-01 07:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

希望这不是太基本,但是。。。在

假设我有一个基类pa(),并且派生了继承自基类的类pai()paj()等。在

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

>>> from pamod import *
>>> mypa = pa()
>>> mypa
<pamod.pa object at 0x28d4fd0>
>>>

。。。然后根据某些操作将其提升(强制转换)为派生类:

^{pr2}$

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

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

mypa.__class__ = pai

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

在我的方案下,pai的每个实例都将作为基类pa的实例开始生命,所以我猜pai__init__方法可能会以某种方式重载。在

看到了吗 this 讨论。在

彼得


Tags: 对象实例方法fromimportobjectthis基类
2条回答

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

(我在这里回答我自己的问题,以便我可以包括代码)

这怎么了?实际上,“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

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

相关问题 更多 >