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

python中父类和子类继承学习

python为啥要使用继承

1. **代码复用**:子类可以继承父类的方法和属性,避免了重复编写相同的代码,提高了代码的复用性。
2. **建立层次结构**:通过继承可以清晰地表示类之间的层次关系,使代码结构更有条理。
3. **扩展和修改功能**:子类可以在父类的基础上进行扩展和修改,添加新的特性或改变某些行为。
4. **提高开发效率**:利用继承可以快速构建复杂的类体系,减少开发时间和工作量。

如何在 Python 中实现继承

  1. 定义子类:创建一个新的类,指定它继承自某个父类。
  2. 在子类中可以重写父类方法:根据需要对父类的方法进行修改或扩展。
class Parent:def method(self):print("这是父类的方法")class Child(Parent):def method(self):print("这是子类的方法")
#Child` 类继承自 `Parent` 类,并在子类中重写了父类的方法。

super()详细解释

  • super()的作用是在子类中调用父类的方法。
  • super(_class_, <first argument>:第一个参数是子类,第二个参数是子类实例。
  • super(type):返回一个未绑定的超级对象。
  • super(type, obj):返回一个绑定的超级对象,要求objtype的实例。
  • super(type, type2):返回一个绑定的超级对象,要求type2type的子类。
class Parent:def __init__(self):self.attribute = "父类属性"class Child(Parent):def __init__(self):super().__init__()  # 调用父类的 __init__ 方法self.child_attribute = "子类属性"# 创建子类实例
child = Child()
print(child.attribute)  # 输出: 父类属性
print(child.child_attribute)  # 输出: 子类属性

父类和子类

  1. 如果类中不定义__init__,调用父类superclass的__init__
  2. 如果类继承父类也需要定义自己的__init_,就需要在当前类的__init_调用一下父类__init__
  3. 如何调用父类__init__:
    super().init(参数)
    super(类名,对象).init(参数)
  4. 如果父类有eat(),子类也定义一个eat方法,默认搜索的原则:先找当前类,再去找父类
  • super().__init__()用于在子类的__init__方法中调用父类的__init__方法,这样可以确保父类的初始化操作也被执行。
  • 然后,子类可以再进行自己的额外初始化操作,添加自己的属性。
  1. 如果类中不定义__init__,调用父类superclass__init__
    在Python中,如果子类没有定义自己的__init__方法,那么它将自动调用父类的__init__方法。这是因为__init__方法是一个特殊的方法,用于在创建类的新实例时初始化对象。

    class Parent:def __init__(self):print("Parent __init__ called")class Child(Parent):pass  # 没有定义 __init__c = Child()  # 这将调用 Parent 的 __init__
    
  2. 如果类继承父类也需要定义自己的__init__,就需要在当前类的__init__调用一下父类__init__
    当子类需要执行一些额外的初始化操作时,它通常会定义自己的__init__方法。在这种情况下,为了确保父类的初始化代码也被执行,子类应该在其__init__方法中调用父类的__init__方法。

    class Parent:def __init__(self):print("Parent __init__ called")class Child(Parent):def __init__(self):super().__init__()  # 调用父类的 __init__print("Child __init__ called")c = Child()  # 这将先调用 Parent 的 __init__,然后调用 Child 的 __init__
    
  3. 如何调用父类__init__

    • 使用super()来调用父类的方法。这是Python 3中推荐的方式。
    • super().__init__():这种方式不需要指定类名和对象,Python会自动处理。
    • super(类名, self).__init__():这种方式在你需要明确指定类名和对象时使用,但在Python 3中不推荐使用。
    class Child(Parent):def __init__(self):super().__init__()  # 推荐的方式# 或者super(Parent, self).__init__()  # 不推荐的方式
    
  4. 如果父类有eat(),子类也定义一个eat方法,默认搜索的原则:先找当前类,再去找父类
    在Python中,当调用一个方法时,会先在当前类的命名空间中查找该方法,如果找不到,再沿着继承链向上查找。

    class Parent:def eat(self):print("Parent is eating")class Child(Parent):def eat(self):print("Child is eating")c = Child()
    c.eat()  # 这将调用 Child 的 eat 方法
    
  5. override(覆盖)
    当子类提供一个与父类同名的方法时,这种行为称为方法覆盖(override)。这允许子类改变或扩展父类的行为。

    class Parent:def greet(self):print("Hello from Parent")class Child(Parent):def greet(self):print("Hello from Child")c = Child()
    c.greet()  # 这将调用 Child 的 greet 方法,即使它继承自 Parent
    

父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,这种行为:重写

http://www.lryc.cn/news/484492.html

相关文章:

  • Linux——GPIO输入输出裸机实验
  • 华为鸿蒙HarmonyOS NEXT升级HiCar:打造未来出行新体验
  • 【项目组件】第三方库——websocketpp
  • 计算机23级数据结构上机实验(第3-4周)
  • 【大数据学习 | HBASE高级】region split机制和策略
  • flink实战 -- flink SQL 实现列转行
  • React中右击出现自定弹窗
  • Unity类银河战士恶魔城学习总结(P128 Switch UI with KeyBoard用键盘切换UI)
  • 基于Springboot+微信小程序的急救常识学习系统 (含源码数据库)
  • 【云计算解决方案面试整理】3-7主流云计算平台、云计算架构、安全防护
  • 数据库范式、MySQL 架构、算法与树的深入解析
  • 设计模式之责任链模式(Chain Of Responsibility)
  • SQLite 全文检索:快速高效的文本查询方案
  • 【微信小程序】报修管理
  • C++——视频问题总结
  • Ubuntu24.04 network:0 unclaimed wireless adapter no found
  • Java 使用MyBatis-Plus数据操作关键字冲突报错You have an error in your SQL syntax问题
  • 深入浅出 ChatGPT 底层原理:Transformer
  • opc da 服务器数据 转 IEC61850项目案例
  • SystemVerilog学习笔记(十一):接口
  • 华大单片机跑历程IO口被写保护怎么解决
  • Iotop使用
  • 定积分的快速计算技巧
  • 第T7周:Tensorflow实现咖啡豆识别
  • imagehash图片去重:保留图片文件名
  • 在Docker环境下为Nginx配置HTTPS
  • vue面试题9|[2024-11-15]
  • 大数据技术在金融风控中的应用
  • 安装一键式重置密码插件(Linux)-CloudResetPwdAgent
  • 如何平滑切换Containerd数据目录