zoukankan      html  css  js  c++  java
  • 【python40--类和对象:一些相关的BIF】

    0、如何判断一个类是否为另外一个类的子类

    --使用issubclass(class,classinfo)函数,如果第一个函数(class)是第二个参数(classinfo)的一个子类,则返回Ture,否则返回False

    * 一个类被认为是其自身的子类

    * classinfo可以是类对象组成的元组,只要class与其中一个候选类的子类,则返回True

    * 在其他情况下,会抛出TypeError异常

    >>> class A:
        pass
    
    >>> class B(A):
        pass
    
    >>> issubclass(A,B)
    False
    >>> issubclass(B,A)
    True
    >>> 
    
    -----B继承了A,所以issubclass(class,classinfo)
    所以 issubclass(B,A)返回的是True
    >>> issubclass(B,B)
    True
    >>> issubclass(B,object)
    True
    >>> 
    
    * 一个类是自身的子类
    * object是所有类的鸡肋

    1、如何判断对象a是否为类A的实例对象?

    --使用isinstance(object,classinfo)函数,如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则返回False

    * 如果第一个参数不是对象,则永远返回False

    * 如果第二个参数不是类或者类对象组成的元组,会抛出一个TypeError的异常

    * 如果object是classinfo的子类的一个实例,也符合条件

    * classinfo可以是类对象组成的元组,只要object是元组内任何一个类的实例化对象,返回True

    >>> class A:
        pass
    
    >>> class B(A):
        pass
    
    >>> b1 = B()
    >>> isinstance(b1,B)
    True
    >>> isinstance(b1,A)
    True
    >>> class C:
        pass

    >>> isinstance(b1,C)
    False
    >>> isinstance(b1,(A,B,C))
    True
    >>>
    ---b1是B的实例化对象,由于B类继承于A类,所以b1也是A类的实例化对象,同样都会返回true
    ---b1不是C的实例化对象,因为C类和A,B类没有任何的关系
    ---b1是(A,B,C)类元组的实例化对象,原因是class只要是元组中任何一个类的实例化对象,返回的就是Tru

    2、如何避免访问对象不存在的属性(不产生异常)?

    有两种方法:

    *、先使用hasattr(object,name)函数判断属性是否存在,如果存在在访问(第一个参数(object)是对象,第二个参数(name)是属性名的字符串形式

    *、直接使用getattr(object,name[,default])函数并设置default参数(返回对象指定的属性值,如果指定的属性不存在,返回default(可选参数)的值)

    >>> class D:
        def __init__(self,x=0):
            self.x = x
    
            
    >>> d1 = D()
    >>> hasattr(d1,x)
    Traceback (most recent call last):
      File "<pyshell#37>", line 1, in <module>
        hasattr(d1,x)
    NameError: name 'x' is not defined
    >>> hasattr(d1,'x')
    True
    >>> 
    
    ---属性名称必须是字符型:'x'
    >>> getattr(d1,'x')
    0
    >>> getattr(d1,'y')
    Traceback (most recent call last):
      File "<pyshell#40>", line 1, in <module>
        getattr(d1,'y')
    AttributeError: 'D' object has no attribute 'y'
    >>> getattr(d1,'y',"当前属性不存在...")
    '当前属性不存在...'
    >>> 
    
    
    --getattr()是返回属性的值,如果不存在则会抛出Error,当然可以设置一个默认的值,如:
    "当前属性不存在..."

    3、setattr(object,name,value)函数 :新建属性并赋值

    >>> class D:
        def __init__(self,x=0):
            self.x = x
    
            
    >>> d1 = D()
    >>> getattr(d1,'y',"当前属性不存在...")
    '当前属性不存在...'
    >>> setattr(d1,'y','1')
    >>> getattr(d1,'y')
    '1'
    
    --没有y属性, 设置了一个y属性并赋值1,再次获取y属性的值得到的是1

    4、delattr(object,name)函数:删除对象中指定的属性,若没有此对象则抛出一个Error

    >>> delattr(d1,'y')
    >>> getattr(d1,'y')
    Traceback (most recent call last):
      File "<pyshell#45>", line 1, in <module>
        getattr(d1,'y')
    AttributeError: 'D' object has no attribute 'y'
    >>> delattr(d1,'z')
    Traceback (most recent call last):
      File "<pyshell#46>", line 1, in <module>
        delattr(d1,'z')
    AttributeError: z
    
    --删除了y属性,再次获取y属性时则返回了: 'D' object has no attribute 'y'
    --删除一个不存在属性,抛出一个Error错误:AttributeError: z

    5、property((fget=None,fset=None,fdel=None,doc=None))函数的作用是什么?

    --property函数允许变成人员轻松,有效地管理属性访问

    class C:
    
        def __init__(self,size=10):
            self.size = size
    
        def getXsize(self):
            return self.size
    
        def setXsize(self,value):
            self.size = value
    
        def delXsize(self):
            del self.size
    
        x = property(getXsize,setXsize,delXsize)
    
    >>> c = C()
    >>> c.x
    >>> Out[4]: 10
    >>> c.x = 12
    >>> c.x
    >>> Out[6]: 12

    一、python的函数修饰符(装饰器)的使用

    1、

  • 相关阅读:
    Linux查看内容命令[持续添加]
    android4.0 x86下载编译简介
    android4.0 x86 裁剪与定制
    Android4.0 x86源码结构,生成目录结构
    android4.0 x86编译生成文件系统镜像system.img结构简介
    [翻译]Mootools 1.2新特性(一):元素存储(Element Storage)
    ASP.NET MVC Preview 3 STEP BY STEP 文章管理实例(一)
    Microsoft Speech API SDK
    PB串口编程资料MSCOMM32参数基本介绍
    Microsoft Speech API Overview(SAPI 5.4)
  • 原文地址:https://www.cnblogs.com/frankruby/p/9677630.html
Copyright © 2011-2022 走看看