Python,如何将现有的父类对象转换为子类对象

Jac*_*eng 2 python types casting

*** 为了说明我想要执行以下操作的原因,我正在尝试包装第三方工具并用它做更多事情。

我正在使用第三方工具,它返回一个对象作为结果。(例如 类 的对象Person,其中包含许多属性)。

我想声明一个新类,例如Driver(Person). 其中包含课堂上的所有内容Person,甚至更多。我不允许修改Person课程。

我已经有一个现有的Person对象(从第三方工具返回),如何将其转换为对象Driver?不要通过初始化一个新的空Driver对象并将所有内容一一复制到其中...就我而言,Person 类中有超过 30 个属性和属性,而 Person 类并不是我需要执行此操作的唯一类。我必须用大约 20 节课来完成这个任务。这就是为什么对我来说,除非没有其他办法,否则为每个课程从头开始一一复制是不切实际的。

class Person:
    def __init__(self):
        self._name = None

    @property
    def name(self):
        return self._name


class Driver(Person):
    def __init__(self):
        super().__init__()
        self._gender = None

    @property
    def gender(self):
        return self._gender

    def __str__(self):
        return f'{self.name} {self.gender}'
Run Code Online (Sandbox Code Playgroud)

给定 的一个实例Person,将其转换为Driver. 但想象一下这两个类都有更多的属性。目前,我基本上只是将 Person 实例作为属性加载到新的 Driver 实例中。但我认为必须有一种更聪明的方法来做到这一点。

3vt*_*vts 8

基本上,类中的所有属性都位于 magic__dict__属性内。这个类似字典的对象包含为该对象本身定义的所有属性。

因此,一次复制所有__dict__属性的方法是将属性从一个类复制到另一个类,无论是在方法内还是从实例中复制,如下所示:

a = Person()
b = Driver()
b.__dict__.update(a.__dict__)
Run Code Online (Sandbox Code Playgroud)

请注意,如果有重复的属性,这些属性将被覆盖,所以要小心