面向对象-内置方法
http://www.cnblogs.com/linhaifeng/articles/6204014.html
item系列,把对象obj模拟称字典,可以像字典一样操作对象属性
class Foo: def __getitem__(self, item): print('getitem') print(item) def __setitem__(self, key, value): print('setitem') print(key,value) def __delitem__(self, key): print('delitem') print(key) obj=Foo() #获取属性 obj['name']
设置属性
class Foo: def __init__(self,name): self.name=name #获取,需要达到obj.属性名取值 def __getitem__(self, item):#item='name' return self.__dict__.get(item) #设置,需要达到obj.属性名="属性值" def __setitem__(self, key, value): # print('setitem') # print(key,value) self.key=value def __delitem__(self, key): print('delitem') print(key) obj=Foo('ya') print(obj.__dict__) obj['sex']='male' print(obj.__dict__)
删除属性
class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): return self.__dict__.get(item) def __setitem__(self, key, value): self.key=value def __delitem__(self, key): print('delitem') print(key) self.__dict__.pop(key) #或者如下方法 # del self.__dict__[key] obj=Foo('ya') print(obj.__dict__) del obj['name'] print(obj.__dict__)
__str__()方法,打印时触发
都是类实例,为什么打印结果不一样?
d=dict({'name':'ya'}) print(d) class Foo: pass obj=Foo() print(obj)
class Foo: def __init__(self,name,age): self.name=name self.age=age def __str__(self): return str({'name':self.name,'age':self.age}) obj=Foo('ya',19) print(obj)
__del__()方法,在程序结束前,做一定的操作
class Open: def __init__(self,filename): print("open file...") self.filenae=filename def __del__(self): print('回收操作系统资源') f=Open('settings.py') print('__main__')
手动回收资源
class Open: def __init__(self,filename): print("open file...") self.filenae=filename def __del__(self): #和系统相关其他资源,在这里进行回收 print('回收操作系统资源') f=Open('settings.py') del f#手动回收操作系统资源 print('__main__')
判断一个对象是否为某类实例
class Foo: pass obj=Foo() #判断一个对象是否为某类实例 print(isinstance(obj,Foo))
判断一个sub类是否为super类的派生类
class Foo: pass obj=Foo()class Bar(Foo): pass #判断一个sub类是否是super类的派生类 print(issubclass(Bar,Foo))