前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】面向对象 - 继承 ② ( 子类重写父类成员 | 子类调用父类重名成员 | 子类中使用 父类类名 调用父类成员 | 子类中使用 super 调用父类成员 )

【Python】面向对象 - 继承 ② ( 子类重写父类成员 | 子类调用父类重名成员 | 子类中使用 父类类名 调用父类成员 | 子类中使用 super 调用父类成员 )

作者头像
韩曙亮
发布2023-10-11 19:49:23
3740
发布2023-10-11 19:49:23
举报

一、子类重写父类成员

1、子类重写父类成员语法

子类 继承 父类的 成员属性 与 成员方法 后 , 如果对 继承的 父类成员 不满意 , 可以 重写 父类成员 ;

成员 属性 和 成员 方法 , 都可以进行重写 ;

  • 成员属性 重写 , 就是在 子类中 , 修改 成员属性的值 ;
  • 成员方法 重写 , 就是在 子类中 , 修改 成员方法的方法体内容 ;

在子类中 , 如果需要重写父类的成员 , 直接在子类中 , 重新定义父类的成员即可 ;

在 Python 中 , 不像 Java / Kotlin / Groovy 一样 , 如果子类重写父类成员 , 需要使用 @Override 注解 修饰 ;

2、代码示例 - 子类重写父类成员

在父类 Animal 中 , 定义了

  • 成员属性 name 和 age ,
  • 成员方法 make_sound 函数 ;

在子类 Dog 中 , 对 父类 Animal 的 成员属性 name 和 age 和 make_sound 成员方法 不满意 , 需要重写两个成员 ,

子类 重写 父类成员 , 只需要 将 父类的成员 , 按照相同的格式 , 重新定义一遍即可 ;

代码示例 :

代码语言:javascript
复制
"""
面向对象 - 继承
"""


class Animal:
    name = "Animal"
    age = 0

    def make_sound(self):
        print("动物发音")


class Dog(Animal):
    name = "狗"  # 重写父类属性
    age = 10

    def make_sound(self):   # 重写父类方法
        print("汪汪")


animal = Animal()
print(f"{animal.name} : {animal.age}")
animal.make_sound()

print("")

dog = Dog()
print(f"{dog.name} : {dog.age}")
dog.make_sound()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Animal : 0
动物发音

狗 : 10
汪汪

Process finished with exit code 0
在这里插入图片描述
在这里插入图片描述

二、子类调用父类重名成员

1、子类调用父类重名成员语法

在 外部 是无法访问 父类成员 : 子类 重写 父类 成员后 , 通过 子类 实例对象 调用 该 重写后的 成员时 , 默认调用的就是 重写后的成员 ;

在 子类内部 可以 访问父类成员 : 如果需要调用被重写之前的 父类成员 , 则需要使用如下方法 :

  • 方法一 : 使用 父类类名 调用父类成员 ;
    • 调用父类同名成员变量 : 父类类名.成员变量名
    • 调用父类同名成员方法 : 父类类名.成员方法名(self)
  • 方法二 : 使用 super 调用父类成员 ;
    • 调用父类同名成员变量 : super().成员变量名
    • 调用父类同名成员方法 : super().成员方法名()

2、代码示例 - 子类中使用 父类类名 调用父类成员

在 Dog 子类中的 make_sound 函数中 ,

  • 通过 Animal.nameAnimal.age 可以调用父类的成员变量 , 打印出来的值为父类的成员变量值 ;
  • 通过 Animal.make_sound(self) 可以调用父类的 成员方法 ;

注意 : 调用 父类 成员方法时 , 需要带参数 self ;

完整代码示例 :

代码语言:javascript
复制
"""
面向对象 - 继承
"""


class Animal:
    name = "Animal"
    age = 0

    def make_sound(self):
        print("动物发音")


class Dog(Animal):
    name = "狗"  # 重写父类属性
    age = 10

    def make_sound(self):   # 重写父类方法
        print("汪汪")
        print(f"{Animal.name} : {Animal.age}")
        Animal.make_sound(self)


animal = Animal()
print(f"{animal.name} : {animal.age}")
animal.make_sound()

print("")

dog = Dog()
print(f"{dog.name} : {dog.age}")
dog.make_sound()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Animal : 0
动物发音

狗 : 10
汪汪
Animal : 0
动物发音

Process finished with exit code 0
在这里插入图片描述
在这里插入图片描述

3、代码示例 - 子类中使用 super 调用父类成员

在 Dog 子类中的 make_sound 函数中 ,

  • 通过 super().namesuper().age 可以调用父类的成员变量 , 打印出来的值为父类的成员变量值 ;
  • 通过 super().make_sound() 可以调用父类的 成员方法 ;

注意 : 调用 父类 成员方法时 , 不带参数 self ;

完整代码示例 :

代码语言:javascript
复制
"""
面向对象 - 继承
"""


class Animal:
    name = "Animal"
    age = 0

    def make_sound(self):
        print("动物发音")


class Dog(Animal):
    name = "狗"  # 重写父类属性
    age = 10

    def make_sound(self):   # 重写父类方法
        print("汪汪")
        print(f"{super().name} : {super().age}")
        super().make_sound()


animal = Animal()
print(f"{animal.name} : {animal.age}")
animal.make_sound()

print("")

dog = Dog()
print(f"{dog.name} : {dog.age}")
dog.make_sound()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Animal : 0
动物发音

狗 : 10
汪汪
Animal : 0
动物发音

Process finished with exit code 0
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、子类重写父类成员
    • 1、子类重写父类成员语法
      • 2、代码示例 - 子类重写父类成员
      • 二、子类调用父类重名成员
        • 1、子类调用父类重名成员语法
          • 2、代码示例 - 子类中使用 父类类名 调用父类成员
            • 3、代码示例 - 子类中使用 super 调用父类成员
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档