'''
触发时机:当对象被内存回收的时候自动触发
[1.页面执行完毕回收所有变量 2.所有对象被del的时候]
功能:对象使用完毕后资源回收
参数:一个self接受对象
返回值:无
'''
1.页面执行完毕回收所有变量,触发析构方法
class Langgou():
food = "吃肉"
def __init__(self,name):
self.name = name
def __del__(self):
print("析构方法被触发")
obj = Langgou("刀疤")
print(obj.name)
2.所有对象被del的时候,触发析构方法
del obj
del other_obj
import os
class Read():
def __new__(cls,name):
if os.path.exists(name):
return object.__new__(cls)
else:
return print("该文件不存在")
def __init__(self,name):
self.fp = open(name,mode="r",encoding="utf-8")
def readcontent(self):
content = self.fp.read()
return content
def __del__(self):
self.fp.close()
obj = Read("wangzhen.txt")
obj.readcontent()
<------------------------------------------------------------------>
'''
触发时机: 使用print(对象)或者str(对象)的时候触发
功能: 查看对象
参数: 一个self接受当前对象
返回值: 必须返回字符串类型
'''
class Cat():
gift = "九条命"
def __init__(self,name):
self.name = name
def __str__(self):
return self.cat()
def cat(self):
return "{}小猫有故事{}".format(self.name,self.gift)
tom = Cat("汤姆")
print(tom)
res = str(tom)
print(res)
<------------------------------------------------------------------------>
'''
触发时机: 使用repr(对象)的时候触发
功能: 查看对象,与魔术方法__str__相似
参数: 一个self接受当前对象
返回值: 必须返回字符串类型
'''
class Mouse():
gift = "打洞"
def __init__(self,name):
self.name = name
def __repr__(self):
return self.mouse()
def mouse(self):
return "{}老鼠有故事{}".format(self.name,self.gift)
obj = Mouse("杰瑞")
print(repr(obj))
<------------------------------------------------------------------>
'''
触发时机:把对象当作函数调用的时候自动触发
功能: 模拟函数化操作
参数: 参数不固定,至少一个self参数
返回值: 看需求
'''
class Mouse():
def __call__(self):
print("王振")
obj = Mouse()
obj()
对象当函数调用
可以用call方法实现模拟系统内置方法(重点)
<----------------------------------------------------------------------------->
'''
触发时机:使用bool(对象)的时候自动触发
功能:强转对象
参数:一个self接受当前对象
返回值:必须是布尔类型
'''
class Mouse():
def __bool__(self):
return False
obj = Mouse()
res = bool(obj)
print(res)
类似的还有如下等等(了解):
__complex__(self) 被complex强转对象时调用
__int__(self) 被int强转对象时调用
__float__(self) 被float强转对象时调用
<------------------------------------------------------------------>
'''
触发时机:使用对象进行运算相加的时候自动触发
功能:对象运算
参数:二个对象参数
返回值:运算后的值
'''
class Mouse():
def __init__(self,num):
self.num = num
def __add__(self,other):
return self.num + other
a = Mouse(7)
res = a + 7
print(res)
两个对象相加的时候,会两次触发add方法第一次是add,第二次是radd
'''
类似的还有如下等等(了解):
__sub__(self, other) 定义减法的行为:-
__mul__(self, other) 定义乘法的行为:
__truediv__(self, other) 定义真除法的行为:/
'''
<---------------------------------------------------------------------->
'''
触发时机:使用len(对象)的时候自动触发
功能:用于检测对象中或者类中某个内容的个数
参数:一个self接受当前对象
返回值:必须返回整型
'''
class Myclass():
pty = 1
pty2 = 2
def __len__(self):
lst = [i for i in MyClass.__dict__ if not( i.startswith("__") and i.endswith("__") )]
return len(lst)
obj = Myclass()
print(len(obj))
'''
类似的还有如下等等(了解):
__iter__(self) 定义迭代容器中的元素的行为
__reversed__(self) 定义当被 reversed() 调用时的行为
__contains__(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为
...
...
'''
<-------------------------------------------------------------------->
print(obj.__dict__)
print(Children.__dict__)
print(obj.__doc__)
print(Children.__doc__)
def earth_boom(self,func):
print(func.__name__ , type( func.__name__ ))
print(obj.__class__)
print(Children.__bases__)