跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 类与对象核心特性

Python 类与对象涉及字符串显示重载、上下文管理协议、私有属性实现、内存优化及属性管理等核心特性。通过定义 __str__ 和 __repr__ 方法控制对象打印格式;使用 __enter__ 和 __exit__ 支持 with 语句;利用 _ 前缀标识伪私有属性;通过 __slots__ 减少实例内存占用;借助 property 装饰器或函数封装属性访问逻辑;结合 super 调用父类方法并遵循 MRO 顺序。这些机制共同构成了面向对象编程的基础。

开源信徒发布于 2016/1/29更新于 2026/10/24108 浏览
Python 类与对象核心特性

1. 改变对象的字符串显示

重载 __str__ 和 __repr__ 方法,当打印对象或者将对象转换为字符串的时候,会自动调用这些重载的方法。打印操作会首先尝试 __str__ 和 str 内置函数,当 __str__ 没有定义时,会调用 __repr__。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return "Point({0},{1})".format(self.x, self.y)

    def __str__(self):
        return "({0},{1})".format(self.x, self.y)

2. 上下文管理协议

实现 __enter__、__exit__ 来使对象支持上下文管理协议。当出现在 with 语句中的时候,__enter__ 方法被触发,返回的对象被赋值为 as 语句声明的对象,然后执行 with 语句块中的内容。最后触发 __exit__ 方法执行清理工作。

3. 伪私有属性

使用 _ 和 __ 来实现 Python 的伪私有属性。

4. 内存优化

通过给类添加 __slots__ 属性来极大的减少实例所占的内存。

class Person(object):
    __slots__ = ['name', 'age']

    def __init__(self, name, age):
        self.name = name
        self.age = age

5. 属性管理

使用 property 来管理类属性。特性协议允许我们把一个特定属性的 get 和 set 操作指向我们所提供的函数或方法,使得我们能够插入在属性操作时自动运行的代码。一个 property 属性实际上就是一系列相关绑定方法的集合。

方式一:装饰器

class Person(object):
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        if not isinstance(name, str):
            raise TypeError('need a string')
        self._name = value

    @name.deleter
    def name(self):
        del self._name

方式二:函数式

class Person(object):
    def __init__(self, name):
        self._name = name

    def getName(self):
        return self._name

    def setName(self, value):
        if not isinstance(value, str):
            raise TypeError('need a string')
        self._name = value

    def delName(self):
        del self._name

    name = property(getName, setName, delName)

这两种方法达到的效果一样。

6. 调用父类方法 super

通过 D.__mro__ 可以查看 D 的继承列表。

class A(object):
    def __init__(self):
        print("A.__init__")

class B(A):
    def __init__(self):
        super(B, self).__init__()
        print("B.__init__")

class C(A):
    def __init__(self):
        super(C, self).__init__()
        print("C.__init__")

class D(B, C):
    def __init__(self):
        super(D, self).__init__()
        print("D.__init__")

d = D()
# 输出顺序:A.__init__, C.__init__, B.__init__, D.__init__
print(D.__mro__)  # (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)

目录

  1. 1. 改变对象的字符串显示
  2. 2. 上下文管理协议
  3. 3. 伪私有属性
  4. 4. 内存优化
  5. 5. 属性管理
  6. 6. 调用父类方法 super
  7. 输出顺序:A.init, C.init, B.init, D.init

更多推荐文章

查看全部
  • Python 开源 AI 模型引入与测试全流程实战
  • 黑客、骇客、白客与红客的定义及工作区别解析
  • Linux 下 C++ 线程池实现与并发安全详解
  • Whisper-Tiny + Go 语音转写服务部署指南 (Ubuntu 20.04)
  • 基于 Spring Boot 的书法比赛评分系统设计与实现
  • wkhtmltopdf 跨平台安装配置指南:Linux/Windows/macOS
  • 低代码平台中Python插件的关键应用场景
  • 本地 AI 人像生成实战:证件照换装、形象照精修与海报合成
  • OpenClaw + 飞书 Agent 构建 AI 自主模拟炒股系统实战
  • Spring Cloud Config 与 Apollo 配置中心架构深度对比
  • WindowsCleaner v5.0:基于 Tkinter 的 Python 系统优化工具
  • Trae 辅助 Java 开发:AI 驱动的高效实践指南
  • 基于 LangGraph 的 Python 记忆机器人:支持搜索工具与人工干预
  • GitHub Copilot 提示词设计与应用指南
  • Android 面试核心知识点与真题解析指南
  • 6 年自研纯 C# UI 引擎 XchyUI,内核小于 200KB 支持跨平台
  • 基于微信小程序的菜谱查询点评系统设计与开发
  • AI 大模型训练与微调实操经验总结
  • VS Code 远程环境 GitHub Copilot 报错排查与修复方案
  • 前端三剑客:HTML、CSS、JavaScript 关系详解

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online