在 Python 中,xx() 的函数叫做魔法方法,指的是具有特殊功能的函数。注意点是 前后是两个下划线
str
str 方法是当使用 print 输出对象的时候,默认打印对象的内存地址,如果类定义了 str 方法,那么就会打印从这个方法中 return 的数据
class Washer(object):def __init__(self):self.width = 300def __str__(self):return '解释说明'haier = Washer()print(haier) # 打印对象
del
del 方法是 Python 中的析构函数。是可选的,如果不提供,则 Python 会在后台自动提供析构函数
class Washer(object):def __init__(self):self.width = 300def __del__(self):print('对象已经删除') # 此处只是为了直观展示 del 被自动调用,无论打不打印,只要创建了对象就会销毁haier = Washer()--------------------------------------------------------------------------------------------------------------->>> 对象已经删除 # 自动调用析构函数
Python 中的对象是使用 引用计数 的方式实现。即如果对象没有引用到一块内存,Python 会自动回收内存,形成垃圾回收机制
new
new__ 方法是用控制这个类创建对象的执行逻辑,在对象还没创建之前就会执行。而 init 是在对象创建完毕后才执行
class Person(object):def __new__(cls, *args, **kwargs): # 参数是cls,代表当前这个类print('先执行 del')return super().__new__(cls) # 一定要写返回对象,不然就不会创建对象def __init__(self):print(f'再执行 init')def __del__(self):print('最后执行 del')p = Person()----------------------------------------------------------------------------------------->>> 先执行 del>>> 再执行 init>>> 最后执行 del
object 的 new 不接收参数,因此 new 方法不能传入 args 和 *kwargs 参数
