__call__
__call__是对象内置魔术方法,如果在类里编写了__ call__方法,则使用类创建的对象可以当函数使用。这样调用函数时会触发__call__ 方法
class Gao(object):
def __init__(self, name):
print(self, name)
def __call__(self):
print("我是__Call__方法")
# def __del__(self):
# print("无引用删除")
s = Gao("jimi")
# 函数调用函数名+()
s() # return None,此刻会进入到 s()就是调用__call__方法,打印出“我是__Call__方法”
__del__
触发机制:
当对象的引用为0时, python 解释器会自动触发类中的__del__方法
查看对象引用:
使用python内置模块sys的getrefcount(对象名)方法;但是当使用该方法时,会将引用+1
对象引用如下图。
程序执行完成后会调用__del__内置方法,这是python解释器自动触发的,当程序运行完成后,会回收开辟的内存空间(也称垃圾回收机制)
如果程序在未运行完成后,使用del 对象主动删除对象引用,当引用=0时会马上执行__del__的方法
__del__作用
__del__是当对象引用为0时会主动调用,所以如果需要对象引用删除后做一些操作可以重写__del__方法
__str__
想打印对象时需要输出一些内容 可以使用__str__方法。不写__str__打印对象时只会输出对象的地址
class Gao(object):
def __str__(self):
return "123"
s = Gao()
print(s) # return 123