封装
Python的封装是一种将数据(属性)和行为(方法)捆绑在一起的操作,以实现数据隐藏和抽象。
封装的目的是保护对象内部的数据不被外部直接访问和修改,同时提供接口与外界交互。
- 私有属性:在Python中,通过在属性名前添加两个下划线(
__
)来定义私有属性。 - getter和setter方法:用于获取和设置私有属性的值。
- 类方法:用于实现类级别的功能。
Python封装示例:
class Person:def __init__(self, name, age):self.__name = name # 私有属性self.__age = age # 私有属性# getter方法def get_name(self):return self.__name# setter方法def set_name(self, name):self.__name = name# getter方法def get_age(self):return self.__age# setter方法def set_age(self, age):if age >= 0:self.__age = ageelse:print("年龄不能为负数")
# 创建Person对象
person = Person("张三", 25)
# 访问私有属性(错误示例,会报错)
# print(person.__name)
# 通过getter方法获取私有属性
print(person.get_name()) # 输出:张三
# 通过setter方法设置私有属性
person.set_name("李四")
print(person.get_name()) # 输出:李四
# 尝试设置非法年龄
person.set_age(-1) # 输出:年龄不能为负数
此例中,__name
和 __age
是私有属性,不能直接从外部访问。通过提供get_name
、set_name
、get_age
和set_age
方法来间接访问和修改这些属性。以确保数据的安全性和有效性。
继承
继承允许我们创建一个新的类(称为子类或派生类)来继承另一个类(称为基类或父类)的属性和方法。其目的是实现代码复用和扩展已有类的功能。
- 单继承:子类继承一个基类。
- 多继承:子类可以继承多个基类。
- 方法重写:子类可以重写基类的方法,以提供特定的实现。
- super()函数:在子类中调用基类的方法。
Python继承示例:
# 基类
class Animal:def __init__(self, name):self.name = namedef speak(self):pass # 在基类中不实现,留给子类去实现
# 派生类
class Dog(Animal):def speak(self):return "汪汪汪"
# 另一个派生类
class Cat(Animal):def speak(self):return "喵喵喵"
# 创建Dog对象
dog = Dog("旺财")
print(dog.name + "说:" + dog.speak()) # 输出:旺财说:汪汪汪
# 创建Cat对象
cat = Cat("咪咪")
print(cat.name + "说:" + cat.speak()) # 输出:咪咪说:喵喵喵
此例中,Animal
是一个基类,有一个属性 name
和一个方法 speak
。Dog
和 Cat
是从 Animal
继承而来的子类,它们都重写了 speak
方法以提供特定的实现。
方法重写和super(),在子类中调用基类的方法,可使用 super()
函数:
class Dog(Animal):def speak(self):return super().speak() + ",汪汪汪" # 调用基类的speak方法
# 现在,如果基类Animal的speak方法有实现,它将被调用
# 然后Dog的speak方法会在基类方法的基础上添加自己的实现
在修改后的 Dog
类中,speak
方法首先调用了基类 Animal
的 speak
方法,然后添加了自己的实现。