python魔术方法
python魔术方法
为什么要单独搞一篇文章来记录魔术方法呢?
因为我觉得它很重要。看代码的时候,总会遇到很多魔术方法,但往往因为不懂含义,不想了解而被劝退,总感觉这里面似乎很复杂。这是我在初学时遇到的问题。但是,这玩意儿其实很简单,了解了就掌握了。
魔术方法,也称dunder methods,以双下划线__
开头和结尾的方法,允许开发者自定义类的行为。
- 以下内容来自深度求索
- 当然,更重要的还是学会看官方文档Python documentation
对象生成周期
__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.