__str__,__del__,exec的用法和__call__方法
这些方法都是class内置的方法
1、__str__
class People: def __init__(self,name,age,sex) self.name=name self.age=age self.sex=sex obj=People('egon',18,'male') print(obj) # <__main__.People object at 0x10f0c2438> 打印出来的就是一个内存地址不是我们想要的信息。那么我们就需要提供一个内置方法。 class People: def __init__(self,name,age,sex) self.name=name self.age=age self.sex=sex def __str__(self): return "<名字:%s 年龄:%s 性别:%s>"%(self.name,self.age,self.sex)) #这里不仅可以返回你想要的值,还可以指定放进去方法 obj=People('egon',18,'male')
print(obj)
__del__的方法(删除方法)
class People: def __init__(self, name,age,sex): self.name=name self.age=age self.sex=sex def__del__(self):#在对象被删除的条件下,自动执行 print('__del__') obj=People('egon',18,'male') del obj. #obj.__del__() time.sleep(5) #这个删除操作会涉及到资源回收问题,但涉及到文件时候的删除就要把文件关闭
class MyOpen:
def __init__(self,filepath,mode="r",encoding="utf-8"):
self.filepath=filepath
self.mode=mode
self.encoding=encoding
self.fobj=open(filepath,mode=mode,encoding=encoding)
def __str__(self):
msg="""
filepath:%s
mode:%s
encoding:%s
""" %(self.filepath,self.mode,self.encoding)
return msg
def __del__(self):
self.fobj.close()#关闭文件
exec专门用来执行字符串中的代码
code=''' global x x=1 y=2 ''' #只要不声明那就是局部的 #global_dic={} #local_dic={} #exec(code, global_dic,loacl_dic) exec(code,{},{}) #第一个{}是全局变量。第二个是{}局部变量 print(global_dic)