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

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.kler.cn/a/395079.html

相关文章:

  • 网络架构与IP技术:4K/IP演播室制作的关键支撑
  • 初学stm32 --- NVIC中断
  • [react 3种方法] 获取ant组件ref用ts如何定义?
  • Java内存区域进一步详解
  • 【机器学习】探索机器学习与人工智能:驱动未来创新的关键技术
  • 如何在自己的云服务器上部署mysql
  • Django处理前端请求的流程梳理
  • 通过命令学习k8s
  • ABAP开发学习——权限控制 实例1
  • PHP代码审计 - SQL注入
  • LeetCode面试经典150题C++实现,更新中
  • gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
  • Mysql篇-三大日志
  • Linux设置Nginx开机启动
  • http拉取git仓库,每次都要输入帐号密码,Ubuntu上记住帐号密码
  • 微积分复习笔记 Calculus Volume 1 - 5.5 Substitution
  • sqlserver 常用分页函数
  • ssh key的生成密钥
  • 区间数位和模板(贪心)
  • ROS Action
  • SQL 注入详解:原理、危害与防范措施
  • Oracle 11g rac 集群节点的修复过程
  • 通过脚本,发起分支合并请求和打tag
  • 【贪心算法】贪心算法三
  • 【HAProxy07】企业级反向代理HAProxy高级功能之Cookie 会话保持与HAProxy 状态页
  • 计算机网络——路由选择算法