在 Python 中,xx() 的函数叫做魔法方法,指的是具有特殊功能的函数。注意点是 前后是两个下划线

str

str 方法是当使用 print 输出对象的时候,默认打印对象的内存地址,如果类定义了 str 方法,那么就会打印从这个方法中 return 的数据

  1. class Washer(object):
  2. def __init__(self):
  3. self.width = 300
  4. def __str__(self):
  5. return '解释说明'
  6. haier = Washer()
  7. print(haier) # 打印对象

del

del 方法是 Python 中的析构函数。是可选的,如果不提供,则 Python 会在后台自动提供析构函数

  1. class Washer(object):
  2. def __init__(self):
  3. self.width = 300
  4. def __del__(self):
  5. print('对象已经删除') # 此处只是为了直观展示 del 被自动调用,无论打不打印,只要创建了对象就会销毁
  6. haier = Washer()
  7. ---------------------------------------------------------------------------------------------------------------
  8. >>> 对象已经删除 # 自动调用析构函数

Python 中的对象是使用 引用计数 的方式实现。即如果对象没有引用到一块内存,Python 会自动回收内存,形成垃圾回收机制

new

new__ 方法是用控制这个类创建对象的执行逻辑,在对象还没创建之前就会执行。而 init 是在对象创建完毕后才执行

  1. class Person(object):
  2. def __new__(cls, *args, **kwargs): # 参数是cls,代表当前这个类
  3. print('先执行 del')
  4. return super().__new__(cls) # 一定要写返回对象,不然就不会创建对象
  5. def __init__(self):
  6. print(f'再执行 init')
  7. def __del__(self):
  8. print('最后执行 del')
  9. p = Person()
  10. -----------------------------------------------------------------------------------------
  11. >>> 先执行 del
  12. >>> 再执行 init
  13. >>> 最后执行 del

object 的 new 不接收参数,因此 new 方法不能传入 args 和 *kwargs 参数