python 之 面相对象内置方法(待续)
常用内置方法
一、isinstance(obj,cls)和issubclass(sub,super)
isinstance(obj,cls)检查对象obj是否是类cls的对象
class Foo(object): pass obj = Foo() isinstance(obj, Foo)
issubclass(sub,super)检查子类sub是否是super类的派生类
class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)
二、item系列
把对象做成一个像字典对象一样的,字典一样去操作
class Foo: #Dict def __init__(self,name): self.name=name def __getitem__(self, item): #item='namexxx' # print('getitem...') return self.__dict__.get(item) def __setitem__(self, key, value): # print('setitem...') # print(key,value) self.__dict__[key]=value def __delitem__(self, key): # print('delitem...') # print(key) del self.__dict__[key] obj=Foo('egon') print(obj.__dict__) # 查看属性: # obj.属性名 print(obj['namexxx']) #obj.name # 设置属性: obj.sex='male' obj['sex']='male' print(obj.__dict__) print(obj.sex) # 删除属性 del obj.name del obj['name'] print(obj.__dict__)
只要在类内部去定义一些__开头,__结尾的方法,这些方法就可以在某种情况下,自动触发执行,帮我来把我的类完成一个定制化的效果
三、__str__方法
让打印的对象变得有意义,
在打印的时候,触发方法,把返回的结果,作为打印的信息
注意:方法的返回值必须是字符串,否则抛出异常
class People: def __init__(self,name,age): self.name=name self.age=age def __str__(self): # print('====>str') return '<name:%s,age:%s>' %(self.name,self.age) obj=People('egon',18) print(obj) #res=obj.__str__()
四、__del__
析构方法,当对象在内存中被释放时,自动触发执行。
注:如果产生的对象仅仅只是python程序级别的(用户级),那么无需定义__del__,如果产生的对象的同时还会向操作系统发起系统调用,即一个对象有用户级与内核级两种资源,比如(打开一个文件,创建一个数据库链接),则必须在清除对象的同时回收系统资源,这就用到了__del__。
class Open: def __init__(self,filename): print('open file.......') self.filename=filename def __del__(self): print('回收操作系统资源:self.close()') f=Open('settings.py') # del f #f.__del__() print('----main------') #程序执行完毕,开始回收del f #f.__del__()
总结一下:在类内部定义了一个__del__方法,这个方法就会在兑现干杯删除或者回收之后,自动触发
下面是两个简单的示范
先del
class Foo: def __del__(self): print('执行我啦') f1=Foo() del f1 print('------->') #输出结果 执行我啦 -------> 简单示范
不要del
class Foo: def __del__(self): print('执行我啦') f1=Foo() # del f1 print('------->') #输出结果 -------> 执行我啦 #为何啊???
典型的应用场景:
创建数据库类,用该类实例化出数据库链接对象,对象本身是存放于用户空间内存中,而链接则是由操作系统管理的,存放于内核空间内存中
当程序结束时,python只会回收自己的内存空间,即用户态内存,而操作系统的资源则没有被回收,这就需要我们定制__del__,在对象被删除前向操作系统发起关闭数据库链接的系统调用,回收资源
内置方法(二)
待续