标签(空格分隔): 内置方法
面向对象里的内置方法:
一、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:
def __init__(self,name):
self.name=name
def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
return self.__dict__.get(item)
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self,key):
print(key)
obj=Foo('egon')
print(obj.__dict__)
#以前获取属性通过如下的代码:
obj.属性名字
#现在获取属性,item系列就是把obj模拟成字典形式,来访问
obj['name']#自动触发了__getitem__自动触发
设置属性
现在如果要设置属性呢?比如我们要设置:obj['sex']='male'只要这样设置就,会触发__setitem__
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
return self.__dict__.get(item)
def __setitem__(self,key,value):
self.__dict__[key]=value
def __delitem__(self,key):
print(key)
obj=Foo('egon')
#设置属性
boj['sex']='male'
print(obj.__dict__)
print(obj.sex)
执行结果为:
![image.png-17.2kB][1]
删除属性:
- del obj.name
del obj['name'],这个会触发,上述的__delitem__,so代码为:
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
return self.__dict__.get(item)
def __setitem__(self,key,value):
self.__dict__[key]=value
def __delitem__(self,key):
self.__dict__.pop(key)
obj=Foo('egon')
#删除属性
del obj['name']
print(obj.__dict__)
执行结果:
![image.png-18.6kB][2]
__str__系列:
以前我们说过{'name':'egon'}这个字典其实就是本质就是我们 调用dict()这个类,然后把参数传进来而已,例如:
dict({'ggname':'egon'})
如上述我们可以使用:d=dict({'name':'egon'})
print(isinstance(d,dict))
执行结果:True
说明:d就是dict的一个实例;
- 对于python自带的类,他们自带配备有打印的功能,打印出来的不是一个对象的地址:
![image.png-62.5kB][3]
执行结果:
![image.png-29.6kB][4]
如上述我加入了:姓名和年龄,结果打印结果还是实力对象地址:
![image.png-91.1kB][5]
执行结果:
![image.png-19.8kB][6]
如上述的代码我们可以知道,对象实例化的时候对我们有用的属性有哪些:名字和年龄,那我们就需要定制一个方法,让他在print()这个对象的时候,就把对我有用的信息打印出来,这个内置的方法是什么呢?
是:
__str__方法:
![image.png-78.9kB][7]
其实当我们执行:print(obj)也就等于print(obj.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)
如上述代码,在自动调取print(obj)的时候回,回自动去调取__str__这个方法;
del
之前我们学习过操作文件,
f=open('a.txt')
f.read()
f.close()
涉及到两方面的知识:上述代码的执行原理是;
a.txt是放在硬盘里面的,程序是不能直接操作硬盘的,程序是通过操作系统,然后有操作系统去操作硬盘的文件,所以我们在打开文件之后,要进行close,目的就是回收操作系统的资源,因为所有的资源不可能让你一直占用的;
- 在你程序关闭之前,把操作系统的资源回收的;
class Open:
def __init__(self,filename):
self.filename=filename
def __del__(self):
print('del....回收操作系统资源,self.close()')
f=Open('setttings.py')
print('------main-------')#这是python 自动给你执行的del也可以自己执行:
del f # f.__del__()
- 内置的——-del--(),在对象被删除的时候,python就自动调用__del__()这个方法;