https://blog.csdn.net/weixin_45912307/article/details/108965633
python高级编程之魔术方法
魔术方法
- 魔术方法:
__名字__()
1. __init__(self)
初始化魔术方法
触发时机: 初始化对象时触发(不是实例化触发,但是实例化在一个操作中)
def 类名():
def __init__(self):
self.属性名=属性值
def call(self):
print(self.属性名)
对象名 = 类名()
对象名.call()
2.__new__
实例化魔术方法
向内存申请地址空间再将地址retrun给__init__
触发时机: 在实例化时触发
def 类名():
def __init__(self,属性名):
self.属性名=属性名
[属性名 = 属性值]
def __new__(cls,*args,**kwargs):
return object.__new__(cls)
对象名 = 类名(属性值)
3.__call__
对象调用方法
触发时机: 将对象当成函数使用的时候,会默认调用此函数中内容
def __call__(self,属性名):
print('{}'.format(属性名))
对象名(属性值)
4. __del__
析构函数方法
def __del__(self):
pass
- 对象赋值
p = Person()
p1 = p
# 说明:p和p1共同指向同一个地址
-
删除地址的引用
del p1
删除p1对地址的引用 -
查看对地址的引用次数:
import sys
sys.getrefcount(p)
- 当一块空间没有了任何引用,默认执行
__del__
ref = 0
5. __str__(self)
触发时机: 打印对象名,自动触发去调用__str__
里面的内容
触发方式
- print(obj)
- format(obj)
- str(obj)
注意: 一定要在__str__
方法中添加return,return后面内容就是打印对象看到的内容
6. __repr__
触发方式:
- repr(obj)
- obj
7. __getattr__
获取属性
触发时机:访问属性时,如果属性不存在(出现AttrError),该方法会被触发
8. __getattribute__
触发时机:访问属性的时候,第一时间触发该方法去找属性
9. __setattr__
触发时机:给对象设置属性时触发
10.__delattr__
触发时机:删除属性时被触发
6. 魔术方法总结
重点掌握:
__str__
打印对象名,自动触发去调用__str__
里面的内容
__init__(self,参数名)
初始化方法,通过类创建对象时,自动触发执行
__new__()
开辟空间
了解:
``
__del__()
没有指针引用的时候会调用,99%不需要重写
__call__()
对象像函数一样调用的时候触发(通过类实现装饰器)
__doc__
类的描述信息
__module__
表示当前操作的对象在哪个模块
__class__
表示当前操作的对象的类是什么
__del__
当对象在内存中被释放时,自动触发执行
__dict__
类或对象中的所有属性