首页 文章 文章详情

Python 特殊方法与特殊属性详解

来源:本站 {{likeCount}} {{commentCount}} 评论 2026-03-02 12:39:59

一、特殊方法(双下划线方法)

特殊方法(又称“魔法方法”)是 Python 类中以双下划线(__)包裹的方法,由解释器自动调用,用于定义类的核心行为。以下是常见类别及示例:

1. 对象生命周期管理

__new__:类方法,控制对象创建(返回实例),常用于单例模式或定制实例创建逻辑。

示例:

class Singleton:
    _instance = None
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

__init__:实例初始化方法,创建实例时自动调用,用于设置属性。

__del__:对象销毁前调用(不建议依赖,垃圾回收时机不确定)。


2. 字符串表示

__str__:定义 print(obj) 或 str(obj) 的输出,侧重可读性。

__repr__:定义 repr(obj) 的输出,侧重调试(应能通过 eval() 重建实例)。


3. 运算符重载

__add__/__sub__:重载 +/- 运算符,实现自定义对象的数值运算。

示例:

class Vector:
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

__eq__/__lt__:重载 ==/< 等比较运算符。


4. 容器行为模拟

__len__:定义 len(obj) 的返回值,用于模拟容器长度。

__getitem__/__setitem__:实现 obj[key] 索引访问和赋值。

__iter__/__next__:支持 for 循环迭代(需返回迭代器)。


5. 上下文管理

__enter__/__exit__:实现 with 语句支持,自动处理资源(如文件关闭)。

示例:

class FileHandler:
    def __enter__(self):
        self.file = open("test.txt", "w")
        return self.file
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()


二、特殊属性

特殊属性用于访问对象的元信息,常见如下:

  • __name__:获取函数、类或模块的名称(字符串)。
    示例:print(Vector.__name__)Vector
  • __doc__:获取对象的文档字符串("""注释内容""")。
  • __class__:返回对象所属的类(如 obj.__class__<class '__main__.Vector'>)。
  • __dict__:返回对象的属性字典(包含实例变量)。


三、核心总结


类别代表方法/属性核心作用
生命周期__new__/__init__控制对象创建与初始化
字符串表示__str__/__repr__定义打印和调试格式
运算符重载__add__/__eq__自定义对象的运算规则
容器行为__len__/__getitem__模拟列表/字典等容器操作
元信息属性__name__/__doc__访问对象的名称和文档


特殊方法和属性是 Python 灵活性的核心,通过实现它们,自定义对象可以像内置类型一样支持运算、迭代、上下文管理等功能,大幅提升代码的简洁性和可扩展性。


相关评论
发表
暂无相关评论...
{{item.userName}} {{item.dateDescription}}
{{item.likeCount}} 回复
{{item.content}}
{{child.userName}}@{{child.atUserName}} {{child.content}}
{{child.dateDescription}}
{{child.likeCount}} 回复