python - 创建可升级类的正确方法是什么
问题描述
我尝试制作易于升级的课程。以下想法:我有一个类“Person”的实例,必须通过使用类“Person”的对象实例化将其转换为另一个类“Worker”。主要条件:
- “人”是“工人”的父类
- 初始化函数彼此不同
现在我写了下面的代码。但我想知道:是否可以将“Worker”类中的冗余属性声明更改为更简单的东西,因为基类“Person”可以随时扩展,我不想编写重复的代码。
实现相同目标的最佳实践是什么?
class Person:
def __init__(self, row: dict = None):
if not row:
row = {}
self.first_name = row.get('first_name', None)
self.last_name = row.get('last_name', None)
# here goes many properties
class Worker(Person):
def __init__(self, person: Person):
super().__init__()
self.position = 'unemployed'
# below code which I want to make independent from base class properties
self.first_name = person.first_name
self.last_name = person.last_name
# here goes many properties of base class
person_info = {'first_name': 'John', 'last_name': 'Doe'}
person = Person(person_info)
worker = Worker(person)
print(f'{worker.first_name} {worker.last_name} is {worker.position}')
解决方案
您可以执行以下操作:
class Worker(Parent):
def __init__(self, person: Person):
vars(self).update(vars(person))
self.position = 'unemployed'
打电话似乎毫无意义super().__init__()
。
请注意,上述内容仅适用于非插槽类。
推荐阅读
- android - 从 Firebase 检索多个数据
- javascript - 服务器发现和监控引擎已弃用
- javascript - 将数组映射到 JavaScript 对象以获取另一个字段的数组
- sql-server - 哪一列导致“将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围”?
- react-router - react-router-config:如何仅在 onClick 上使用 {renderRoutes} 渲染孙子路由
- reactjs - 如何在不修改 .htaccess 文件的情况下在 Apache 服务器上设置 React 应用程序?
- mysql - MySQL选择只有一些值但没有其他值的行
- ssl - 无权访问远程集群中的 Kafka Connect 内部主题
- docker - 在 jFrog 工件中存储 docker 图像 - 本地设置
- swift - 出现错误:当我将 pod 推送到私有 cocoapods 存储库时使用未声明的类型