当前位置: 首页 > news >正文

用python定义类时,用子类继承父类,当父类需要从子类中传递很多形参时,该怎么处理

当父类需要从子类传递很多参数时,直接在子类中逐个传递参数会导致代码冗长、易出错且难以维护。此时可以通过 *args 和 **kwargs 简化参数传递,或结合 “参数分组”“显式声明必要参数” 等技巧,平衡灵活性和可读性。

核心解决方案:用 *args 和 **kwargs 批量传递参数

*args 用于接收可变数量的位置参数,**kwargs 用于接收可变数量的关键字参数。子类可以通过这两个变量收集父类所需的所有参数,再批量传递给父类的 __init__ 方法,避免逐个列举参数。

场景示例:父类有多个参数

假设父类 Person 需要多个参数(姓名、年龄、性别、地址、电话等),子类 Student 继承自 Person,并新增自己的参数(学号、学校)。
方法 1:**kwargs 传递所有父类参数(推荐)
子类先接收自己的专属参数,剩余参数通过 **kwargs 打包传递给父类,清晰区分 “子类自有参数” 和 “父类所需参数”。

 

class Person:def __init__(self, name, age, gender, address, phone):# 父类需要5个参数self.name = nameself.age = ageself.gender = genderself.address = addressself.phone = phoneprint(f"父类初始化:{self.name}, {self.age}岁")class Student(Person):def __init__(self, student_id, school, **kwargs):# 子类自有参数:student_id(学号)、school(学校)self.student_id = student_idself.school = school# 用**kwargs将剩余参数传递给父类super().__init__(** kwargs)  # 父类需要的name/age等参数从kwargs中获取print(f"子类初始化:学号{self.student_id}, 学校{self.school}")# 实例化子类时,传递子类参数 + 父类所有参数
student = Student(student_id="2023001",school="北京大学",# 以下是父类需要的参数(通过关键字参数传入,会被**kwargs收集)name="张三",age=20,gender="男",address="北京市海淀区",phone="13800138000"
)# 输出:
# 父类初始化:张三, 20岁
# 子类初始化:学号2023001, 学校北京大学

  

http://www.zskr.cn/news/18896.html

相关文章:

  • LLM Agentic Memory Systems
  • 量化(一)
  • 2025 年试验箱厂商最新推荐排行榜:涵盖高低温 / 恒温恒湿 / 冷热冲击等设备,精选研发实力强、质量管控严的优质企业
  • 2025 最新化粪池生产厂家推荐排行榜:聚焦老牌标杆与新锐力量,预制 / 玻璃钢品类权威甄选钢筋混凝土/一体/成品/拼装式化粪池厂家推荐
  • 加权图异常检测技术获最具影响力论文奖
  • java基础3-判断和循环
  • 论文对比
  • 关于我心目中的理想课堂构建之法的一些感受
  • 2025 年工业与民用加热器品牌最新推荐排行榜,深度盘点机柜、柜内、紧凑、PTC 风扇型等多类型加热器优质厂商
  • Qoj 14436. Robot Construction/Open Your Brain 做题记录
  • 如何查看Linux系统信息,Linux查看系统基本信息命令
  • 当游戏NPC有了“灵魂”,网易伏羲解码游戏智能交互场景新实践
  • CF1082E 解题报告
  • 国标GB28181算法算力平台EasyGBS具备哪些核心流媒体技术?
  • 如何复制获取无法复制的页面内容
  • 2025 年国内无尘车间源头厂家最新推荐排行榜:聚焦无菌洁净领域优选企业助力企业精准选型万级/十万级/洁净/食品厂/千级无尘车间厂家推荐
  • 高效工作,五步工作法
  • Python3开发敏感词过滤程序底层逻辑记录
  • 详细介绍:腾讯混元 3D 系列两大模型正式于 GitCode 开源:首个原生3D部件生成+多条件控制模型免费开放
  • 如何通过内核版本检查判断FreeBSD是否需要重启
  • C#中关于InvokeRequired 属性 与Invoke方法
  • MZOI 20251011【CSP-】模拟 T2 序列区间
  • 完整教程:后端进阶-性能优化
  • Java的各类定时任务实现
  • 03:运算符
  • python静态类型之any
  • 2025 年最新金蝶云服务商推荐榜单:聚焦铂金伙伴技术实力与万级客户口碑,助力企业数字化转型精准选型上海金蝶云服务商推荐
  • 使用 C++ 和 minizip 实现 ZIP 压缩解压工具
  • 西部数码使用外部dns服务器怎么配置解析
  • 一看就懂,Oracle认证体系中的OCP中级认证