常见的魔术方法:
1、__del__() 销毁魔术方法
2、__call__() 让类的实例具有类似函数的行为
3、__repr__() 改变对象的字符串显示
4、__new__() 实例化魔术方法
5、__str__() 使用print(对象)或者str(对象)的时候触发
6、__hash__() 哈希算法
例子1:使用__call__方法实现斐波那契数列:
lass Fib():
def __init__(self):
pass
def __call__(self,month):
lst=[]
a,b=1,1
n=1
while n<=month:
lst.append(a)
a,b=b,a+b
n+=1
return lst
f=Fib()
for i in range(1,10):
print(f(i))
例子2:__repr__方法:
class Per():
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
return "我叫{},年龄{}".format(self.name,self.age)
a=Per("张三",24)
print(repr(a))
is和==区别:
is 比较两个对象的ID值是否相等,是否指向同一个内存地址。
==比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。
class Stu():
def __init__(self,name,age):
self.name=name
self.age=age
def __eq__(self, other): #equal 等于
print("123456789")
return self.__dict__==other.__dict__
# return b
a=Stu("张三",28)
b=Stu("张三",28)
c=Stu("李四",20)
print(a==c)
print(a is c)
哈希算法:
哈希变换是一种单向运算,具有不可逆即不能根据哈希值还原输入信息。
在python中有内置的哈希函数hash(),返回一个对象(数字、字符串,不能直接用于list、set、dictionary)的哈希值。