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

posted @ 2015-10-16 23:32  淡蓝色的天空很美  阅读(323)  评论(0编辑  收藏  举报