一.__del__方法 销毁魔术方法
触发时机:
当一个对象在内存中被销毁的时候自动执行
参数:
至少有一个self,接收对象
返回值:
无
作用:
在对象销毁的时候做一些操作
注意:
程序自动调用此方法,不需要我们手动调用。
情况:
(1)当程序全部结束之后,才会进行删除
(2)__del__会看对象的调用在哪里结束,如果结束直接运行del
二.__call__方法 函数
__call__():可以让类的实例具有类似于函数的行为,
进一步模糊了函数和对象之间的概念。
使用方式:
对象后面加括号,触发执行。即:对象() 或者 类()()
第一种情况:
__call__(*args,**kwargs),这种情况不用再我们调用的函数中加数值
第二种情况:
用Call写一个斐波拉契数列
class Fibonacci(object):
def __call__(self,num):
a,b = 1,1
self.lst = []
if num<=2:
self.lst.append(a)
self.lst.append(b)
else:
for i in range(1,num+1):
self.lst.append(a)
a,b = b,a+b
return self.lst
fibo = Fibonacci()
ret = fibo(3)
print(ret)
三.__repr__方法 (__init__的备胎方法)
__repr__():改变对象的字符串显示
- 此方法是__str__()的备胎,如果找不到__str__()就会找__repr__()方法。
- %r 默认调用的是 __repr()方法,如果是字符串会默认加上 ''
-repr()方法默认调用__repr__()方法
现在我们来试一试:
当有__str__函数的时候
当没有__str__函数的时候
还有一个用途(我表示并没有卵用的功能,想和str平分秋色)
输出是相同的
四.__new__方法
4.__new__
实例化魔术方法
触发时机
在实例化对时触发
参数
至少一个cls 接收当前类
返回值
必须返回一个对象实例
作用
实例化对象
注意
实例化对象是Object类底层实现,其他类继承了Object的__new__才能够实现实例化对象。
没事别碰这个魔术方法,先触发__new__才会触发__init__
五.__str__方法
__str__
触发时机
使用print(对象)或者str(对象)的时候触发
参数
一个self接收对象
返回值
必须是字符串类型
作用
print(对象时)进行操作,得到字符串,通常用于快捷操作
六.__eq__和__hash__方法
首先,我们先了解
==和is的区别
is比较的是他们的内存地址是否相同 ==比较的是他们的值是否想用
明白了这个,我们就可以利用hash试下