小甲鱼Python学习笔记

课程核心:类与对象的内置函数(BIF)

一、类关系判断BIF

1. issubclass(class, classinfo)

  • 功能:判断class是否是classinfo的子类
  • 关键特性
    • 非严格检查:一个类被视为自身的子类
    • classinfo可以是类元组,会逐一检索
    • 不满足条件抛TypeError
  • 代码示例
    • class A; class B(A); class C
    • issubclass(B, A) → True
    • issubclass(B, B) → True
    • issubclass(B, object) → True(所有类默认继承object)
    • issubclass(B, C) → False

2. isinstance(object, classinfo)

  • 功能:判断实例对象是否属于某个类/某些类
  • 关键特性
    • 第一个参数必须是实例对象,传类则返回False
    • classinfo可以是类元组,逐一检查
    • 不满足条件抛TypeError
    • 子类实例也属于父类(继承传递性)
  • 代码示例
    • b1 = B()
    • isinstance(b1, B) → True
    • isinstance(b1, A) → True
    • isinstance(b1, C) → False

二、对象属性操作BIF

共性注意:属性名需传入字符串格式

1. hasattr(object, name)

  • 功能:检查对象是否包含指定属性
  • 代码示例
    • class C: def init(self, x=0): self.x = x
    • c1 = C()
    • hasattr(c1, "x") → True(必须传字符串"x")
    • hasattr(c1, x) → 抛NameError(直接传变量x报错)

2. getattr(object, name[, default])

  • 功能:获取对象指定属性的值
  • 关键特性
    • 属性存在 → 返回属性值
    • 属性不存在 → 有default则返回default,无则抛AttributeError
  • 代码示例
    • getattr(c1, "x") → 0
    • getattr(c1, "y", "属性不存在") → "属性不存在"
    • getattr(c1, "y") → 抛AttributeError

3. setattr(object, name, value)

  • 功能:设置对象指定属性的值,属性不存在则新建
  • 代码示例
    • setattr(c1, "y", "new_attr")
    • getattr(c1, "y") → "new_attr"

4. delattr(object, name)

  • 功能:删除对象指定属性,属性不存在抛AttributeError
  • 代码示例
    • delattr(c1, "y") → 成功删除
    • delattr(c1, "y") → 再次删除抛AttributeError

三、特殊BIF:property(fget, fset, fdel, doc)

  • 核心作用:通过属性间接操作属性,封装接口,隔离内部修改
  • 参数说明
    • fget:获取属性的方法
    • fset:设置属性的方法
    • fdel:删除属性的方法
    • doc:文档字符串(可选)
  • 代码实操(C类size属性案例)
    1. 定义基础方法:get_size()、set_size()、del_size()
    2. 绑定property:x = property(get_size, set_size, del_size)
    3. 实例调用:c1.x → 调用get_size();c1.x=18 → 调用set_size();del c1.x → 调用del_size()
  • 核心优势:内部方法改名不影响用户接口
    • 例:get_size改名为get_exercise → 只需修改property参数,用户仍用c1.x调用
  • 底层原理:基于魔法方法实现,后续课程讲解

课程总结

  • 掌握类关系判断、属性操作的核心BIF
  • property实现属性操作的接口封装,提升代码可维护性