标签:__ 内置 name 方法 self print 部分 s1 def
__getattr__是当属性不存在的时候运行
__setattr__是设置的时候自动运行 低层实现方法self.__dict__[key]=value
__delattr__是删除的时候自动设置 低层实现方法self.__dict__.pop(key)
补充:
上面的是用点方式来使用
__getitem__
__setitem__
__delitem__都是用[] 来用
反射
hasattr(object,name)
getattr(object,name,default) 如果查询不到则返回default 如果没有default 那么如果查询不到则报错
setattr(object,keys,values) 可以添加也可以修改 可以添加匿名函数
delattr(object,keys)
授权:
import time class Open: def __init__(self,filename,mode="w",encoding="utf8"): self.file=open(filename,mode,encoding=encoding) self.mode=mode self.encoding=encoding def write(self,name): self.file.write("%s %s" %(time.strftime("%Y-%m-%d %X"),name)) def __getattr__(self, item): return getattr(self.file,item) f=Open("123.txt","w") f.write("123")
__getattribute__的使用
class Test: def __init__(self,s): self.s=s def __getattr__(self, item): print("输出的是getattr") def __getattribute__(self, item): print("输出的是getattribute") raise AttributeError("123") f=Test(10) print(f.s) #输出的是getattribute #输出的是getattr #None
无论何时都会触发__getattribute__
__str__ 与__repr__的使用
class Foo1: def __init__(self,name): self.name=name def __repr__(self): #与__str__一样 return "%s %s" %(time.strftime("%Y/%m/%d %X"),self.name) # 需要实例才可以,类不可以 s1=Foo1("123") print(s1) #显示的方法都是str(s1)------>s1.__str__ #2020/07/06 16:40:48 123
repr只是在cmd中使用能自动返回
而str需要print才行
析构函数 __del__
class F: def __init__(self,name): self.name=name def __del__(self): print("我执行了") f=F("ljh") del f.name print("_______________>") #运行结果 # _______________> # 我执行了 class F: def __init__(self,name): self.name=name def __del__(self): print("我执行了") f=F("ljh") del f print("_______________>") #运行结果 # 我执行了 # _______________>
总结:__del__()是在类结束时自动运行,而实例结束无法自动运行
迭代器协议:
class Foo: def __init__(self,name): self.name=name def __iter__(self): return self def __next__(self): if self.name==15: raise AttributeError("错误") self.name+=1 return self.name s1=Foo(10) print(s1.__next__()) print(s1.__next__()) print(s1.__next__()) print(s1.__next__()) print(s1.__next__()) print(s1.__next__())
标签:__,内置,name,方法,self,print,部分,s1,def 来源: https://www.cnblogs.com/rxybk/p/13285026.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。