欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Python 面向对象三大特性深度解析

Python 面向对象三大特性深度解析

2025/3/22 15:21:51 来源:https://blog.csdn.net/weixin_63779518/article/details/146426762  浏览:    关键词:Python 面向对象三大特性深度解析

面向对象三大特性

一、封装(Encapsulation)

1. 私有化实现

class BankAccount:def __init__(self, account_holder, balance=0):self.__holder = account_holder  # 双下划线私有属性self.__balance = balance# 公有方法访问私有属性def deposit(self, amount):if amount > 0:self.__balance += amountprint(f"存款成功,当前余额:{self.__balance}")def get_balance(self):return self.__balance# 使用示例
account = BankAccount("Alice", 1000)
account.deposit(500)  # 正常操作
print(account.__balance)  # 报错:AttributeError

2. 属性装饰器

class Temperature:def __init__(self, celsius):self._celsius = celsius  # 保护属性@propertydef celsius(self):return self._celsius@celsius.setterdef celsius(self, value):if value < -273.15:raise ValueError("温度不能低于绝对零度")self._celsius = value@propertydef fahrenheit(self):return self._celsius * 9/5 + 32# 使用示例
temp = Temperature(25)
print(temp.fahrenheit)  # 77.0
temp.celsius = 30       # 正常设置
temp.celsius = -300     # ValueError

二、继承(Inheritance)

1. 单继承示例


class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("子类必须实现此方法")class Dog(Animal):def speak(self):return "汪汪!"def fetch(self, item):print(f"{self.name} 捡回了 {item}")class Cat(Animal):def speak(self):return "喵~"# 使用示例
dog = Dog("Buddy")
print(dog.speak())  # 汪汪!
dog.fetch("球")     # Buddy 捡回了 球cat = Cat("Kitty")
print(cat.speak())  # 喵~

2. 多继承与MRO


class Camera:def take_photo(self):print("拍照中...")class Phone:def make_call(self, number):print(f"正在拨打:{number}")class SmartPhone(Camera, Phone):def run_app(self, app_name):print(f"运行 {app_name}")# 查看方法解析顺序
print(SmartPhone.mro())
# [<class '__main__.SmartPhone'>, 
#  <class '__main__.Camera'>, 
#  <class '__main__.Phone'>, 
#  <class 'object'>]# 使用示例
phone = SmartPhone()
phone.take_photo()  # 拍照中...
phone.make_call(110) # 正在拨打:110

三、多态(Polymorphism)

1. 方法重写实现多态

class Shape:def area(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2class Rectangle(Shape):def __init__(self, width, height):self.width = widthself.height = heightdef area(self):return self.width * self.height# 多态调用
shapes = [Circle(5), Rectangle(4, 6)]
for shape in shapes:print(f"图形面积:{shape.area()}")

2. 鸭子类型实现多态


class PDFGenerator:def generate(self, data):print("生成PDF文档:", data)class HTMLGenerator:def generate(self, data):print("生成HTML页面:", data)def export_data(exporter, data):exporter.generate(data)# 调用示例
export_data(PDFGenerator(), "报表数据")  # 生成PDF文档
export_data(HTMLGenerator(), "产品目录") # 生成HTML页面

四、综合实战案例

员工管理系统

class Employee:def __init__(self, name, emp_id):self.__name = nameself.__emp_id = emp_id@propertydef name(self):return self.__namedef calculate_salary(self):raise NotImplementedErrorclass FullTimeEmployee(Employee):def __init__(self, name, emp_id, monthly_salary):super().__init__(name, emp_id)self.__monthly_salary = monthly_salarydef calculate_salary(self):return self.__monthly_salaryclass PartTimeEmployee(Employee):def __init__(self, name, emp_id, hourly_rate, hours):super().__init__(name, emp_id)self.hourly_rate = hourly_rateself.hours = hoursdef calculate_salary(self):return self.hourly_rate * self.hours# 使用示例
employees = [FullTimeEmployee("张三", "FT001", 15000),PartTimeEmployee("李四", "PT001", 100, 80)
]for emp in employees:print(f"{emp.name} 薪资:{emp.calculate_salary()}")

五、最佳实践与注意事项

  1. 封装原则

    • 使用最少公开原则(最小化公有接口)
    • 优先使用属性装饰器而不是直接暴露属性
  2. 继承规范

    • 避免超过三层的继承链
    • 慎用多继承,优先使用组合
    • 使用 super() 正确调用父类方法
  3. 多态实现

    • 遵循里氏替换原则(子类可替换父类)
    • 使用抽象基类(ABC)强制接口实现

from abc import ABC, abstractmethodclass DatabaseConnector(ABC):@abstractmethoddef connect(self):pass
  1. 常见错误
# 错误:忘记调用super().__init__
class SubClass(Parent):def __init__(self, param):self.param = param  # 父类初始化未执行

通过本教程的实践,您已经掌握面向对象编程的核心特性。建议进一步学习:

  • 魔术方法(如 str, add
  • 元类编程(metaclass)
  • 设计模式(工厂模式、观察者模式等)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词