在面向对象中有不少内置方法,你会发现都很容易知道它的用处与平时用到的函数同样。设计模式
一、__str__:一旦被调用,就返回调用这个方法的对象的内存地址。app
# 一、__str__:一旦被调用,就返回调用这个方法的对象的内存地址 class A: def __init__(self,name):self.name=name def __str__(self): return 'A is object '+self.name res = A('广深小龙') print(res) # 打印一个对象,至关于调用了a.__str__ print('%s:%s'%('A:',res))
二、__repr__:函数
# 二、__repr__: class A: def __init__(self,name):self.name=name def __str__(self): return 'A is object '+self.name def __repr__(self):return str(self.__dict__) res = A('广深小龙') print(res) # 打印一个对象,至关于调用了a.__str__ print('%s:%s'%('A:',res)) print(repr(res))
三、__len__:内置方法有不少,能够定制本身的内置方法学习
# 三、__len__:内置方法有不少,能够定制本身的内置方法 class A: def __init__(self,name): self.name=[] def __len__(self): return len(self.name)+1 res=A('小龙龙') res.name.append('广深小龙') res.name.append('广深小龙') print(len(res))
四、__del__:析构函数:spa
删除一个对象以前,进行一些收尾工做设计
# 四、__del__:析构函数 # 删除一个对象以前,进行一些收尾工做 class A: def __del__(self): print('执行我了') a=A() del a # 既执行了del方法,也删除了变量a
五、__call__,调用能直接返回想要返回的功能,不用传方法名称:3d
# 五、__call__,调用能直接返回想要返回的功能,不用传方法名称 class A: def __init__(self,name):self.name=name def __call__(self, *args, **kwargs): print(self.__dict__) a=A('小龙龙')() # 调用内部__call__方法
六、item系列:code
①list:增删查改对象
# 一、list:增删查改 class A: def __init__(self,name):self.name=name def __getitem__(self, item): if hasattr(self,item): return self.__dict__[item] def __setitem__(self, key, value): self.__dict__[key]=value def __delitem__(self, key):del self.__dict__[key] a=A('广深小龙') print(a['name']) # 查 a['age']='22' # 增 print(a.age) a['age']='55' # 改 print(a['age']) del a.name # 删 del a['age'] print(a.__dict__)
七、__new__:构造方法blog
# 二、__new__:构造方法 class A: def __init__(self): print('init') def __new__(cls, *args, **kwargs): # 会先执行__new__方法 print('__new__') return object.__new__(A, *args, **kwargs) a = A() # 会先执行cls,object.__new__,再执行self的__init__
7-一、设计模式:单列模式
class A: __res=False def __init__(self,name,age): self.name=name self.age=age def __new__(cls, *args, **kwargs): # 会先执行__new__方法 if cls.__res: return cls.__res cls.__res=object.__new__(A) return cls.__res a = A('广深小龙','22') b = A('小龙女','18') print(a) print(b) print(a.name) print(b.name) a.addr='广深' print(b.addr) # a追加,但b也有。单列模式
八、__eq__:比较两个值,也是可定制处理。
# 八、__eq__:比较两个值,也是可定制处理 class A: def __init__(self,name): self.name=name def __eq__(self, other): if self.name==other.name: print('%s 就是等于 %s'%(self.name,other.name)) return True else:False res1=A('gsxl') res2=A('gsxl') print(res1==res2) # 正常是不相等,但__eq__能够定制处理
九、__hash__:定制化将哈希函数。
# 9、__hash__:定制化将哈希函数 class A: def __init__(self,name,hname): self.name=name self.hname=hname def __hash__(self): return hash(self.name+self.hname) res1=A('gsxl','2233') res2=A('gsxl','2233') print(hash(res1)) print(hash(res2))
欢迎来你们QQ交流群一块儿学习:482713805 !!!