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

Python:如何将对象从基类提升到派生类?,python,Python,希望这不是太基本,但是 假设我有一个基类pa(),我有从基类继承的派生类pai()、paj()等 我想从基类pa()实例化一个对象: 来自pamod导入的>>* >>>mypa=pa() >>>迈帕 >>> 。。。然后根据某些操作将其升级(强制转换)为派生类: >>> mypa.do(this) >>> mypa <pamod.pai object at 0x28d4fd0> >>> >>mypa.do(此) >>>迈帕

希望这不是太基本,但是

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

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

来自pamod导入的
>>*
>>>mypa=pa()
>>>迈帕
>>>
。。。然后根据某些操作将其升级(强制转换)为派生类:

>>> mypa.do(this)  
>>> mypa
<pamod.pai object at 0x28d4fd0>
>>>
>>mypa.do(此)
>>>迈帕
>>>
其中,基于“this”的值,mypa成为类pai等的对象

我知道我可以分配给对象的
\uuuuuuuuuuuuuuuuuuu类

mypa.
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

然而,我想知道这是否真的是最好的方法

在我的方案下,pai的每个实例(比如)都会作为基类pa的实例开始使用,所以我猜pai的
\uuuu init\uuuu
方法可能会以某种方式过载

看 讨论


Peter

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

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

我不明白。似乎重新分配
\uuuu类\uuuuu
可以让我不必复制所有内容,这很好,因为我们讨论的是大量(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

我不明白。似乎重新分配
\uuuu类\uuuuu
可以让我不必复制所有内容,这很好,因为我们讨论的是大量(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

或者编写您的
\uuuu init\uuuu
以便它可以选择接受基类的实例。+1 DIP是您的朋友,或者编写您的
\uuuuuu init\uuu
以便它可以选择接受基类的实例。+1 DIP是您的朋友