MST

星途 面试题库

面试题:Python类封装特性在继承场景下的应用

假设有一个基类`Animal`,具有私有属性`__name`和公有方法`get_name`。再创建一个子类`Dog`继承自`Animal`,要求在`Dog`类中新增一个私有方法`__bark`,并在公有方法`make_sound`中调用这个私有方法以及调用父类的`get_name`方法。请写出完整代码,并说明在这个继承体系中封装特性是如何体现和工作的。
40.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class Animal:
    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return self.__name


class Dog(Animal):
    def __bark(self):
        print("汪汪汪!")

    def make_sound(self):
        self.__bark()
        print(f"我叫{self.get_name()}")


# 测试代码
dog = Dog("旺财")
dog.make_sound()

封装特性的体现和工作方式:

  1. 基类封装:在Animal类中,属性__name被设置为私有,外部代码无法直接访问。只能通过公有的get_name方法来获取__name的值。这体现了封装的信息隐藏原则,保护了内部数据不被随意修改。
  2. 子类封装:在Dog类中,方法__bark被设置为私有,外部代码无法直接调用。只有在Dog类内部的其他方法(如make_sound)中可以调用。这进一步保护了类的内部实现细节,使得外部使用时只需要关注make_sound这个公有方法,而不需要了解具体的__bark实现。
  3. 继承中的封装Dog类继承自Animal类,它继承了Animal类的封装特性,即可以使用get_name方法来获取从父类继承而来的私有属性__name的值。同时,Dog类自身也通过私有方法__bark实现了进一步的封装,在make_sound方法中协调调用父类方法和自身私有方法,展示了封装在继承体系中的协同工作。