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