零基础入门学习Python(20):对象(5)类和对象的内置函数
作为对象的最后一节内容,下面通过举例介绍一下类和对象的一些相关的内置函数(BIF)。
1、issubclass(class, classinfo):判断class是不是classinfo的子类
1)一个类被认为是其自身的子类,object是所有类的基类;
2)classinfo可以是类对象组成的元组,只要class是其中一个候选类的子类,则返回True,其他情况抛出TypeError异常。
>>> class A:
pass
>>> class B(A): #类B继承类A
pass
>>> issubclass(B,A)
True
>>> issubclass(B,B)
True
>>> issubclass(B,object) #object是所有类的基类
True
>>> class C:
pass
>>> issubclass(B,C)
False
2、isinstance(object,classinfo ):检查一个实例对象是否属于一个类
1)如果第一个参数不是对象,则永远返回False;
2)如果第二个参数不是类或者由类对象组成的元组,则会抛出一个TypeError异常。
>>> b1 = B() #创建一个B的实例对象
>>> isinstance(b1,B)
True
>>> isinstance(b1,A) #A是B的基类,B的对象也属于A的对象
True
>>> isinstance(B,A) #第一个参数必须是对象
False
>>> isinstance(b1,(A,B,C)) #只要b1是类组成的元组中的任意一个类的实例对象,函数都返回True
True
3、hasattr(object,name):测试一个对象里面是否有指定的属性,其中,object是对象,name是用表示字符串的引号引起来的属性名。
>>> c1 = C()
>>> hasattr(c1,'x') #上面定义的类C中没有定义任何属性,所以其对象c1中没有属性x
False
>>> class C: #重新定义C,则其拥有属性x
x = 2
>>> c1 = C()
>>> hasattr(c1,'x')
True
4、getattr(object, name[,default]):获得类或对象的属性
>>> getattr(c1,'x') #获得对象c1的x属性
2
>>> getattr(C,'x')
2
>>> getattr(c1,'y') #获得不存在的属性时会抛出AttributeError异常
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
getattr(c1,'y')
AttributeError: 'C' object has no attribute 'y'
>>> getattr(c1,'y','NoExist') #第三个参数可以用来设置出错时要显示的内容
'NoExist'
5、setattr(object, name, value):设置类或对象的属性
>>> setattr(c1,'y',7) #设置对象的一个y属性值为7
>>> getattr(c1,'y','NoExist')
7
>>> setattr(C,'z',1) #设置类C的一个z属性值为1
>>> getattr(c1,'z','NoExist')#此时可以通过对象c1获得类C设置的属性值
1
>>> getattr(C,'y','NoExist') #但是通过类C不能获得其对象c1设置的属性值
'NoExist'
6、delattr(object, name):删除类或对象的属性
>>> delattr(c1,'y') #删除对象c1的y属性
>>> getattr(c1,'y','NoExist')
'NoExist'
>>> delattr(c1,'z') #不能通过对象删除其类中定义的属性
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
delattr(c1,'z')
AttributeError: z
7、property(fget = None, fset = None, fdel = None, doc = None):设置属性的属性
>>> class A:
def __init__(self, size = 7):
self.size = size
def getSize(self):
return self.size
def setSize(self, value):
self.size = value
def delSize(self):
del self.size
x = property(getSize, setSize, delSize)
>>> a1 = A()
>>> a1.getSize()
7
>>> a1.x #通过访问对象的x属性也可以得到size属性的值
7
>>> a1.x = 10 #通过x修改属性size
>>> a1.size
10
>>> del a1.x #删除x属性之后,size属性也被删除了
>>> a1.size
Traceback (most recent call last):
File "<pyshell#65>", line 1, in <module>
a1.size
AttributeError: 'A' object has no attribute 'size'