Python 中的 dunder method

本文详细介绍了Python中的特殊方法,包括用于基本自定义的`__new__`、`__init__`、`__del__`等,以及自定义属性访问的`__getattr__`、`__getattribute__`等。此外,还涵盖了类创建、实例和子类检查、模仿可调用对象和容器类型的实现,帮助读者全面了解如何利用特殊方法扩展Python对象的功能。
摘要由CSDN通过智能技术生成

1. 基本的自定义

__new__ 与 __init__
# 3.0 后不继承任何类默认继承 Object, python 2.2 新增的新式继承方法


class MyClass:
    # __new__ 是一个 static method, args 是传入的参数 为 tuple类型, kwargs 为 dict 类型
    def __new__(cls, *args, **kwargs):
        print('new method', args, kwargs)
        # 不能用 MyClass() 会死循环
        return object.__new__(MyClass)

    def __init__(self, name, g):
        self.name = name
        self.g = g
        print('init method')


# 这里创建一根  MyClass 的对象, 首先会调用 __new__ 生产一个对象, 再调用 __init__ 进行一些初始化操作
# 自己没实现, 则会调用父类的 方法
o = MyClass("asdasd", "b")
# new method ('asdasd', 'b') {}
# init method
# 最终继承至 Object class
print(MyClass.mro())  # [<class '__main__.MyClass'>, <class 'object'>]
__del__

析构函数, 对象生命周期即将消失时调用的方法, 也有可能在 __del__方法里面对对象进行再一次的引用(不推荐), 这种做法叫做resurrection(耶稣复活), 这样析构函数就可能被调用多次, 目前 CPython 中的实现只会调用一次

__repr__ 和 __str__

都是美化对象的输出, 如果同时实现这两个方法, 会只输出__str__方法中返回的字符串

__format__

返回一个在进行占位的字符串, 有额外参数formatspec文档

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值