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





一、子类重写父类成员




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


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

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

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

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

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


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


在父类 Animal 中 , 定义了

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

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

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


代码示例 :

"""
面向对象 - 继承
"""


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()

执行结果 :

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 ;


完整代码示例 :

"""
面向对象 - 继承
"""


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()

执行结果 :

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 ;


完整代码示例 :

"""
面向对象 - 继承
"""


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()

执行结果 :

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

在这里插入图片描述

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值