###### __del__ 魔术方法(析构方法)
'''
触发时机:当对象被内存回收的时候自动触发
[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()
<------------------------------------------------------------------>
##### __str__ 魔术方法
'''
触发时机: 使用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)
# 用str强转的时候触发
res = str(tom)
print(res)
<------------------------------------------------------------------------>
#### __repr__ 魔术方法
'''
触发时机: 使用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))
<------------------------------------------------------------------>
#### __call__ 魔术方法
'''
触发时机:把对象当作函数调用的时候自动触发
功能: 模拟函数化操作
参数: 参数不固定,至少一个self参数
返回值: 看需求
'''
# (1)基本用法
class Mouse():
def __call__(self):
print("王振")
obj = Mouse()
obj()
对象当函数调用
可以用call方法实现模拟系统内置方法(重点)
<----------------------------------------------------------------------------->
#### __bool__ 魔术方法
'''
触发时机:使用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强转对象时调用
<------------------------------------------------------------------>
### __add__ 魔术方法 (与之相关的__radd__ 反向加法)
'''
触发时机:使用对象进行运算相加的时候自动触发
功能:对象运算
参数:二个对象参数
返回值:运算后的值
'''
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__ 魔术方法
'''
触发时机:使用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)时的行为
...
...
'''
<-------------------------------------------------------------------->
#### 魔术属性
# __dict__ 获取对象或类的内部成员结构
print(obj.__dict__)
print(Children.__dict__)
# __doc__ 获取对象或类的内部文档
print(obj.__doc__)
print(Children.__doc__)
# __name__ 获取类名函数名
def earth_boom(self,func):
print(func.__name__ , type( func.__name__ ))
# __class__ 获取当前对象所属的类
print(obj.__class__)
# __bases__ 获取一个类直接继承的所有父类,返回元组
print(Children.__bases__)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交