习惯性地将基类对象转换为子类对象?

2024-05-18 08:35:01 发布

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

有一个基类Base和一个子类Special

class Base(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        return 'Hello %s' % self.name

class Special(Base):
    def __init__(self, name):
        super(Special, self).__init__(name)
    def rhyme(self):
        return 'Hi %s! How are you? Fine, thanks. What about you?' % self.name

如何将Base的实例转换为Special实例?目前我在Special上定义了一个classmethod,它只是重新分配__dict__

class Special(Base):
    ...
    @classmethod
    def from_base(cls, baseobj):
        special = Special()
        special.__dict__ = baseobj.__dict__
        return special

这是惯用语吗?如果不是,会是什么?

一个例子场景:基类是一些默认的实现。在野外,您可能会找到基类的对象。现在在一些项目中,基类已经是子类,并且特殊的方法已经添加到子类中。现在您仍然主要使用基类对象,但有时您会希望“升级”到特殊类,因为您需要访问一些方法。


Tags: 实例nameselfyoubasereturninitdef