040类和对象:一些相关的BIF
1. issubclass(class,classinfo)
功能: 如果class是classinfo的一个子类就返回True
注意:一个类被认为是其自身的子类
classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True
其他情况会抛出一个TypeError异常
如:>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> class C:
... pass
...
>>> issubclass(B,A)
True
>>> issubclass(B,B)
True
>>> issubclass(B,C)
False
2. isinstance(object,classinfo)
功能:检查一个实例对象object是否是一个类classinfo的实例对象
注意:如果第一个参数不是对象,则永远返回False
如果第一个参数不是类或者由类对象组成的元组会抛出一个TypeError异常
如:利用上面的类
>>> b1 = B()
>>> isinstance(b1,B)
True
>>> isinstance(b1,A)
True
>>> isinstance(b1,C)
False
>>> isinstance(b1,(A,B,C))
True
3. hasattr(object,name)
功能:测试一个对象是否有这个属性
注意:属性名需要用引号引起来的
如:>>> class C:
... def __init__(self,x=0):
... self.x = x
...
>>> c1 = C()
>>> hasattr(c1,'x')
Trues
>>> hasattr(c1,x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
4. getattr(object,name[,default])
功能:返回对象指定的属性值,如果没有就返回default的值,没有定义default就抛出AttributeError异常
如:>>> getattr(c1,'x') #属性存在
0
>>> getattr(c1,'y') #属性不存在
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: C instance has no attribute 'y'
>>> getattr(c1,'y','not this attr') #属性不存在,并定义了default
'not this attr'
5. setattr(boject,name,value)
功能:设定对象中指定的属性值,若不存在就添加此属性值并赋值
如:>>> getattr(c1,'y','not this attr')
'not this attr'
>>> setattr(c1,'y','wang')
>>> getattr(c1,'y','not this attr')
'wang'
6. delattr(object,name)
功能:删除对象中指定的属性,若不存在就抛出AttributeError异常
如:>>> delattr(c1,'y')
>>> delattr(c1,'y')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: C instance has no attribute 'y'
7. property(fget=None,fset=None,fdel=None,doc=None)
功能:用属性定义属性。
fget:获得属性的方法
fset:设置属性的方法
fdel:删除属性的方法
如:>>> class C:
... def __init__(self,size=10):
... 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)
... #用户只需要x来操作属性,当上面的方法有变化时,不影响用户的访问
>>> c1 = C()
>>> c1.getSize() #原来的方法获取size属性
10
>>> c1.x #用x属性修改size属性
10
>>> c1.x = 18 #修改x属性
>>> c1.x
18
>>> c1.size #size属性也改变了
18
>>> c1.getSize()
18