关于类与对象的一些常用BIF(内置函数)
1、issubclass(class,classinfo)
含义:如果class是classinfo的子类,则返回True,否则返回false,用来判断子类关系
2、isinstance(objiect,classinfo)
含义:检查一个实例对象是否属于一个类,第一个参数为实例对象,第二个为类
3、hasattr(object,name)
作用:测试一个对象(object)是否具有固定的属性(name),属性必须带“ ”,表明是字符串。
4、getattr(object,name[,default])
作用:返回一个特定对象的属性的特定值(前提是该对象具有该属性),如果该对象没有这个属性,则为了提高用户的体验,可以将第三个参数default设置为“你所访问的属性不存在”,这样当不存在属性的时候就可以返回“你所访问的属性不存在”。
5、setattr(object,name,value)
作用:对对象进行属性的新定义——设置新属性
6、delattr(object,name)
作用:用来删除对象的固定属性,如果该对象没有这个属性的话,就会抛出异常
7、property(fget=none,fset=none,fdel=none.doc=none)
作用:通过属性定义属性,property() 是一个比较奇葩的BIF,它的作用把方法当作属性来访问,从而提供更加友好访问方式。
property() 返回一个可以设置属性的属性,当然如何设置属性还是需要我们人为来写代码。第一个参数是获得属性的方法名(例子中是 getx),第二个参数是设置属性的方法名(例子中是 setx),第三个参数是删除属性的方法名(例子中是 delx)。
property() 有什么作用呢?举个例子,在上边的例题中,我们为用户提供 setx 方法名来设置 _x 属性,提供 getx 方法名来获取属性。但是有一天你心血来潮,突然想对程序进行大改,可能你需要把 setx 和 getx 修改为 set_x 和 get_x,那你不得不修改用户调用的接口,这样子的体验就非常不好。
有了 property() 所有问题就迎刃而解了,因为像上边一样,我们为用户访问 _x 属性只提供了 x 属性。无论我们内部怎么改动,只需要相应的修改 property() 的参数,用户仍然只需要去操作 x 属性即可,对他们来说没有任何影响。
各个内置函数举例如下,可以促进对于它们的理解: