魔术方法

(一)del()方法

销毁魔术方法
触发时机:当一个对象在内存中被销毁的时候自动执行
参数:至少有一个self,接收对象
返回值:无
作用:在对象销毁的时候做一些操作
注意:程序自动调用此方法
例如:
#魔术方法__del__删除魔术方法

class A():
    num=0#类属性,也叫静态变量
    def __init__(self,name,):
        A.num+=1
        self.name=name
    def __del__(self):
        A.num-=1
        print(self.name,'被删除了,还剩{}'.format(A.num))
a=A("张三")
b=A("李四")
c=A("王五")
del a
del b
del c

结果:
张三 被删除了,还剩2
李四 被删除了,还剩1
王五 被删除了,还剩0

(二)__call__方法

call():可以让类的实例具有类似的函数行为,进一步模糊了函数和对象的概念
使用方法:对象后面加括号,即出发执行,即:对象()或者类()()
例如:

class A():
    def __init__(self,num):
        self.num=num
    def __call__(self, n):
        return self.num*n
a=A(7)#调用类
b=a(9)#调用__call__()相当于函数
print(b)

结果:
63

(三)repr()方法

repr():改变对象的字符串显示
此方法是__str__()备胎,如果找不到__str__()就会找__repr__()方法
%r调用的是__repr()方法,如果是字符串会默认加上‘’
repr()方法默认调用__repr__()方法
例如
#repr__方法。__str__方法的备胎

class Per():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '我家{}  年龄{}'.format(self.name,self.age)
    def __str__(self):
        return '%s:%d'%(self.name,self.age)
a=Per("张三",19)
print(str(a))
print('我是:%s'%(a))#%s找__str__
print('我叫:%r'%(a))#%r找__repr__
print(repr(a))

结果:
张三:19
我是:张三:19
我叫:我家张三 年龄19
我家张三 年龄19

(四)new()方法

实例化魔术方法
触发时机:在实例化对时出发
参数:至少一个cls接受当前的类
返回值:必须返回一个对象实例
例如:
class Stu():
#实例化,实际是创建一个新的对象

  def __new__(cls, *args, **kwargs):
        print('12343234323')
        return object.__new__(cls)
    #用obj类,去创建一个此类的对象实例cls,代表是本类
    def __init__(self,name,age):#初始化的时候出发
        print('2222222222')
        self.name=name
        self.age=age
zs=Stu("小意",18)
print(zs.name)

结果:
12343234323
2222222222
小意

(五) str()方法

触发时机:使用print(对象)或者str(对象)的时候触发
参数:一个self接收对象
返回值:必须是字符串类型
作用:print(对象时)进行操作,得到字符串,通常用于快捷操作
注意:无

(六)is 和==的区别

字符串,整型属于不可变所以没区别
例如:
a=7
b=7
print(a==b)
print(a is b)
结果:
True
True
字典,列表,集合可变,值相等,但是地址不一样
例如:

a=[1,2,3]
b=[1,2,3]
print(a==b)#比较值
print(a is b)#比较内存地址
print(id(a))
print(id(b))

结果:
True
False
32725000
32724616

(七)hash()方法

python中内置有一个名字叫做hash(o)的函数。

接受一个不可变类型的数据作为参数。
返回结果是一个整数。
哈希, 是一种算法。其作用就是提取数据的特征码(类似指纹)。

相同的内容得到相同的结果。
不同的内容得到不同的结果。
在python中,设置字典的键值对时,会首先对key进行hash,决定如何在内存中保存字典的数据,以方便后续对字典的操作:增、删、改、查、

键值对的 key 必须是不可变类型数据。
键值对的 value 可以是任意类型的数据。
例如:

hash

class Stu():
    def __init__(self,name):
        self.name=name
    def __eq__(self, other):
        return self.name==other.name
    def __hash__(self):#集合对哈希的值非常敏感
        return hash(self.name)
a=Stu("张三")
b=Stu("李四")
c=Stu("张三")
#print(hash(a))
#print(id(a)/16)
#print(id(a))
#print(id(b))
#print(id(c))
#print(a==c)
print(a==b)
d={a,b,c}
print(d)#a和c的内存地址虽然不一样,但是他们两个的哈希和eq是一样的
a={'name':5}
a.keys()

结果:
{<main.Stu object at 0x0000000001EDA358>, <main.Stu object at 0x0000000001EDA550>}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值