魔术方法

Python中以双下划线开头和结尾的方法就是魔术方法

常用的魔术方法

  1. __init__:

包含了类初始化中需要做的事情

  • __del__:

对象即将被释放的时候会调用这个方法,注意:如果两个对象产生循环引用而且还都实现了__del__方法内存就会得不到释放

  • __new__:

这个方法用于创建对象。如果创建对象的时候想要做些事情,就可以重写这个方法

  • __class__魔术属性:

返回这个对象所属的类。对于一个类调用这个属性,那么返回类的元类,默认是type

  • __iter__:

返回一个迭代器

  • __next__:

迭代器在被遍历的时候会每遍历一次调用这个方法,Python2中是next方法

  • __str__:

在打印某个对象的时候,一般打印出来的时候都是类名+地址如果需要打印出来的东西友好些就可以重写这个方法,定义自己的字符串返回

以上是重写前的打印的现象

以上是重写之后的现象

如果在对一个对象使用了str()函数的话,也是会调用对象中__str__方法,如下

  • __repr__:

这个魔术方法用来表述一个对象,在内存中的展示形式。

比如:如果在终端定义了一个类,然后初始化一个对象,然后直接输入这个对象接着按回车,这时候会使用__repr__魔术方法返回的值:

意思就是p1在内存中是如何表述的

在pycharm中,如果将一个对象创建完成后,放到一个列表中,然后再打印这个列表,那么会打印这个列表中所有的对象,这时候会调用__repr__魔术方法

在元组,列表,字典中都是如此

实现了__repr__方法之后

  • __dict__魔术属性:

用于装载所有用户自定义的属性和值,以字典的形式返回

与dir()函数的区分:

Dir()函数是获取一个对象拥有的所有属性,包括Python内置的

这个并没有获取到属性的值