Python 私有化、import、封装继承多态

本文介绍了Python中的私有化,包括如何定义私有变量和方法,以及单前后下划线的区别。同时,详细讲解了`import`导入模块的机制,包括搜索路径、变量的引用方式以及多模块开发中的注意事项。最后,探讨了封装、继承和多态在Python面向对象编程中的重要性和应用。

私有化

默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似JAVA、C++中public,private等关键词来修饰成员函数和成员变量。
在python中定义私有变量只需要在变量名或函数名前加上双前置下划线   ” __  “ ,那么这个函数或变量就是私有的了。

    x      :公有变量
  _x      :单前置下划线,私有化属性或方法,禁止通过from modules import *导入,但是类对象和子类可以访问
__xx    :双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到),类对象和子类不能访问
__xx__:双前后下划线,(公有)用户名字空间的魔法对象或属性。例如: __init__  __ 尽量不要自定义这种形式的。
    xx_  :单后置下划线,用于避免与Python关键词的冲突(不建议使用) 
 

 

import导入模块

import搜索路径

路径搜索

<think> 我们刚刚讨论了类方法、静态方法和实例方法的区别,现在用户转向了面向对象的三大特性:封装继承多态。用户要求详细介绍这三个概念在Python中的实现和应用。 从引用内容看,用户提供的资料已经涵盖了三大特性的基本定义和简单示例: 1. 引用[1]和[2]精炼地定义了封装继承多态 2. 引用[3]展示了多重继承及其方法解析顺序 3. 引用[4]和[5]通过动物/形状等经典案例演示了多态 我的回答需要系统化组织这些知识点,特别注意: - 封装要强调名称修饰(伪私有属性)和property装饰器 - 继承需说明方法解析顺序(MRO)和super()机制 - 多态要突出"鸭子类型"这个Python特色 结构上采用分章节形式,每个特性包含: 1) 基本概念 2) Python实现方式 3) 应用场景 4) 注意事项(如多重继承的风险) 最后用综合示例展示三大特性协同工作的场景,并生成相关问题供深入学习。 </think> ### Python面向对象三大特性:封装继承多态详解 #### 一、封装(Encapsulation) **定义**:将数据(属性)和行为(方法)捆绑为独立单元,隐藏内部实现细节[^1][^2]。 **核心实现**: ```python class BankAccount: def __init__(self, owner, balance=0): self._owner = owner # 受保护属性 self.__balance = balance # 私有属性(名称修饰) # 公开接口方法 def deposit(self, amount): if amount > 0: self.__balance += amount def withdraw(self, amount): if 0 < amount <= self.__balance: self.__balance -= amount return amount return 0 # 属性访问控制 @property def balance(self): return self.__balance # 只读访问 # 使用示例 account = BankAccount("Alice", 1000) account.deposit(500) print(account.balance) # 1500 (通过属性访问) # account.__balance = 0 # 错误!无法直接访问私有属性 ``` **关键特性**: 1. **访问控制**: - `__var`:私有属性(实际被重命名为`_ClassName__var`) - `_var`:受保护属性(约定俗成,非强制) - `var`:公开属性 2. **属性装饰器**: - `@property`:定义获取方法 - `@var.setter`:定义设置方法 - `@var.deleter`:定义删除方法 3. **优势**: - 防止外部意外修改数据[^1] - 简化接口复杂度 - 实现数据校验逻辑(如在setter中) --- #### 二、继承(Inheritance) **定义**:创建新类(子类)基于已有类(父类),实现代码复用和层次扩展[^1][^3]。 **实现方式**: ```python class Animal: # 父类 def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("子类必须实现此方法") class Dog(Animal): # 单继承 def speak(self): return "汪汪!" class Cat(Animal): def speak(self): return "喵喵!" # 多重继承示例 class Robot: def beep(self): return "哔哔!" class RoboDog(Dog, Robot): # 多重继承 def speak(self): return super().speak() + self.beep() # 使用 buddy = Dog("Buddy") print(buddy.speak()) # 汪汪! robo = RoboDog("Astro") print(robo.speak()) # 汪汪!哔哔! ``` **关键机制**: 1. **方法重写(Override)**: - 子类可重新定义父类方法 2. **super()函数**: - 调用父类方法:`super().method()` 3. **多重继承**: - 方法解析顺序(MRO):按`__mro__`元组顺序查找[^3] ```python print(RoboDog.__mro__) # (<class '__main__.RoboDog'>, <class '__main__.Dog'>, # <class '__main__.Animal'>, <class '__main__.Robot'>, # <class 'object'>) ``` 4. **抽象基类(ABC)**: ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass ``` **注意事项**: - 避免过度使用多重继承(易导致"菱形继承问题") - 优先使用组合而非继承实现代码复用[^3] --- #### 三、多态(Polymorphism) **定义**:不同对象对同一方法调用产生不同行为[^1][^4][^5]。 **实现方式**: ```python def animal_sound(animal): print(animal.speak()) # 不检查类型,只依赖方法存在 class Duck: def speak(self): return "嘎嘎!" # 使用 animals = [Dog("Buddy"), Cat("Whiskers"), Duck()] for a in animals: animal_sound(a) # 输出: # 汪汪! # 喵喵! # 嘎嘎! ``` **Python特色(鸭子类型)**: ```python class Car: def speak(self): # 非动物但实现speak return "嘀嘀!" animal_sound(Car()) # 嘀嘀!(只要实现speak方法即可) ``` **核心特点**: 1. **动态绑定**:运行时确定调用哪个方法 2. **接口协议**:不强制类型,只要求实现特定方法 3. **优势**: - 增强代码扩展性 - 降低模块耦合度 - 支持开放封闭原则(对扩展开放,对修改封闭) --- ### 三大特性协同示例 ```python class Employee: # 封装 def __init__(self, name, salary): self.__name = name self.__salary = salary @property def salary(self): return self.__salary def work(self): return "处理一般事务" class Developer(Employee): # 继承 def work(self): # 多态 return "编写代码" class Manager(Employee): def work(self): return "管理团队" def company_work(employees): for emp in employees: print(f"{emp.name}: {emp.work()}") # 使用 dev = Developer("张三", 15000) mgr = Manager("李四", 30000) company_work([dev, mgr]) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值