Python面向对象编程3

Python面向对象编程


九、object类与特殊方法重写
  1. object类地位
    • 所有类的基类(顶级父类)
    • 默认包含多个内置方法

  2. 常用特殊方法重写

class Student:
    def __init__(self, name):  # 初始化方法
        self.name = name
    
    def __str__(self):          # 对象字符串表示
        return f"Student: {self.name}"
    
    def __del__(self):          # 对象销毁时调用
        print(f"{self.name}对象被回收")

stu = Student("小明")
print(stu)  # 输出:Student: 小明

十、运算符重载与特殊方法
运算符/操作对应方法功能说明示例实现
+__add__(self, other)加法运算return self.value + other
-__sub__减法运算
*__mul__乘法运算
/__truediv__真除法
//__floordiv__整除运算
%__mod__取模运算
**__pow__幂运算
<__lt__小于比较return self.age < other.age
==__eq__等于比较
len()__len__返回长度return len(self.items)
in__contains__成员检测return key in self.data

示例实现:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
    
    def __str__(self):
        return f"({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(1, 4)
print(v1 + v2)  # 输出:(3, 7)

十一、对象特殊属性
特殊属性描述访问示例
obj.__dict__对象属性字典(实例级别)print(stu.__dict__)
obj.__class__对象所属类print(type(stu) is stu.__class__)
class.__bases__类的父类元组(继承关系)print(Student.__bases__)
class.__base__类的第一个父类
class.__mro__方法解析顺序(继承层次)print(Child.__mro__)
class.__subclasses__()类的直接子类列表print(Parent.__subclasses__())

十二、拷贝机制详解
拷贝类型操作方式特点图示说明
赋值= 创建对象引用(共享内存)[→] 原对象
浅拷贝copy.copy()创建新对象,但嵌套对象保持引用[→] 原对象→嵌套对象
深拷贝copy.deepcopy()递归创建全新对象(完全独立副本)[→] 全新对象

示例代码:

import copy

class CPU:
    def __init__(self, model):
        self.model = model

class Computer:
    def __init__(self, cpu):
        self.cpu = cpu

# 原始对象
c1 = Computer(CPU("i9"))

# 浅拷贝
c2 = copy.copy(c1)  
c2.cpu.model = "i7"  # 会影响c1的cpu

# 深拷贝
c3 = copy.deepcopy(c1) 
c3.cpu.model = "AMD"  # 不会影响原对象

知识图谱总结
面向对象核心
类与对象
三大特征
特殊机制
类属性/实例属性
实例方法/静态方法/类方法
封装-property
继承-MRO/super
多态-鸭子类型
运算符重载
对象生命周期
拷贝机制

高频面试考点
  1. __new____init__的区别
  2. 深拷贝对不可变对象的影响(如元组)
  3. MRO算法(C3线性化算法)
  4. 鸭子类型在实际框架中的应用(如Django ORM)
  5. 属性查找链(实例→类→父类→object)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值