Python面向对象编程2

Python面向对象编程


六、封装与属性控制
  1. 访问权限标识

    命名方式含义示例
    单下划线开头 _x约定私有属性(外部仍可访问)self._salary
    双下划线开头 __x名称修饰(伪私有化)self.__password
    首尾双下划线 __x__系统定义特殊属性/方法__init__
  2. @property装饰器

    class Person:
        def __init__(self, name):
            self._name = name  # 保护属性
        
        @property
        def name(self):        # 获取器
            return self._name
        
        @name.setter
        def name(self, value): # 设置器
            if len(value) < 2:
                raise ValueError("姓名至少2个字符")
            self._name = value
    
    p = Person("Alice")
    print(p.name)    # 像访问属性一样调用getter
    p.name = "Bob"   # 像赋值一样调用setter
    

七、继承进阶
  1. 继承语法与特性

    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 "喵~"
    
  2. 多继承与MRO

    class A:
        def show(self):
            print("A")
    
    class B(A):
        def show(self):
            print("B")
    
    class C(A):
        def show(self):
            print("C")
    
    class D(B, C):  # 多继承
        pass
    
    print(D.mro())  # 方法解析顺序:D -> B -> C -> A -> object
    d = D()
    d.show()        # 输出 B
    
  3. super()使用技巧

    class Father:
        def __init__(self, name):
            self.name = name
            print("Father初始化完成")
    
    class Son(Father):
        def __init__(self, name, age):
            super().__init__(name)  # 调用父类初始化
            self.age = age
            print("Son初始化完成")
    

八、Python多态特性
  1. 核心特点
    鸭子类型:不检查对象类型,只关心是否具有对应方法
    无需继承关系:只要对象实现了相同方法名即可

  2. 典型示例

    class PDFReader:
        def read(self):
            print("解析PDF内容")
    
    class TextReader:
        def read(self):
            print("读取文本内容")
    
    class ImageReader:
        def read(self):
            print("解码图像数据")
    
    def process_file(reader):  # 接收任何有read()方法的对象
        reader.read()
    
    # 不同类型对象均可处理
    process_file(PDFReader())    # 解析PDF内容
    process_file(TextReader())   # 读取文本内容
    process_file(ImageReader())  # 解码图像数据
    

概念对比表
特性Java实现方式Python实现方式
封装private关键字命名约定 + property装饰器
继承单继承+接口多继承 + mixin模式
多态基于继承的类型系统基于鸭子类型的动态多态
方法重写@Override注解直接重写同名方法
父类方法调用super关键字super()函数

学习建议
  1. 练习使用@property实现数据验证
  2. 尝试构建3层继承体系(爷爷类->父类->子类)
  3. 用多继承实现一个实际场景(如会飞+会游泳的动物)
  4. 编写需要动态判断对象能力的函数,体会鸭子类型
  5. 研究__mro__属性的实际应用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值