Post

python魔术方法

python魔术方法

为什么要单独搞一篇文章来记录魔术方法呢?

因为我觉得它很重要。看代码的时候,总会遇到很多魔术方法,但往往因为不懂含义,不想了解而被劝退,总感觉这里面似乎很复杂。这是我在初学时遇到的问题。但是,这玩意儿其实很简单,了解了就掌握了。

魔术方法,也称dunder methods,以双下划线__开头和结尾的方法,允许开发者自定义类的行为。

对象生成周期

__init__(self, ...):构造方法

1
2
3
class Person:
    def __init__(self, name):
        self.name = name

__del__(self):析构方法(竟然有析构,我也是第一次知道,但很少在代码中看到)

运算符重载

__add__(self, other):定义+操作

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

__eq__(self, other):定义等于比较

__lt__(self, other):定义小于比较

__str__(self):定义str(obj)print(obj)的字符串表示

容器类操作

__len__(self):定义len(obj)的行为

1
2
3
class MyList:
    def __len__(self):
        return len(self.items)

__getitem__(self, key):定义obj[key]的访问

__setitem__(self, key, value):定义obj[key]=value的赋值

__contains__(self, item):定义in操作符的行为

属性访问

__getattr__(self, name):访问不存在的属性时调用

__setattr__(self, name, value):设置属性时调用

其他

__dict__:查看对象属性的字典

This post is licensed under CC BY 4.0 by the author.