一、item系列:把对象模拟成字典进行操作
class Foo: def __init__(self,name): self.name = name def __getitem__(self, item): # item = "name" # 查看 print("get item") return self.__dict__.get(item) def __setitem__(self, key, value): # 设置 print("set item") print(key,value) self.__dict__[key] = value def __delitem__(self, key): # 删除 print("del item") print(key) del self.__dict__[key] obj = Foo("egon") print(obj.__dict__) #查看属性: # 原本查看属性格式是obj.属性 获取属性的方式 print(obj["name"]) # 查看name的属性,即字典的key和value的查看,如果"name"不存在,则返回None #设置属性 #原来设置属性格式是obj.sex = "male" obj["sex"] = "male" #等于添加新的key和value值 print(obj.__dict__) print(obj.sex) #删除属性 #原来是del obj.name del obj["name"] #等于删除字典的key及其value
二、__str__方法
class People: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return "Name:%s Age:%s" %(self.name,self.age) # 必须有返回值,且返回值必须为字符串类型 obj = People("egon",18) #print(obj) # 没使用__str__方法之前,直接print(obj)得出的是内存地址 print(obj) # 使用__str__方法后,打印时可以直接执行该方法下面的代码,相当于 res = obj.__str__()
三、__del__方法,
如果在类内部定义了__del__方法(这个方法是绑定给对象的),那这个方法在对象被删除之前先被触发,然后再把对象删除
class Open: def __init__(self,filename): print("open file ...") self.filename = filename def __del__(self): # 与对象相关联的数据在这里定义回收操作 print("回收操作系统资源:如self.close()") f = Open("settings.py") print("----main----") #最后一行代码执行完成后,自动执行 del f # f.__del__()