__str__,__del__,exec的用法

__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)
原文地址:https://www.cnblogs.com/wuchenyu/p/8868930.html