zoukankan      html  css  js  c++  java
  • Python3 类和对象:与类和对象相关的BIF

    1、判断一个类为另一个类的子类

    issubclass(class,classinfo)判断第一个参数是否为第二参数的子类

    注意:1、这是不严格判断,因为一个类被认为是自身的子类

       2、classinfo 可以是类对象组成的元组,只要class是其中任何一个候选的子类则返回Ture

       3、在其他情况下抛出TypeError的错误

    class A:
        def __init__(self):
            print('我是A类')
    
    
    class B(A):
        def __init__(self):
            print('我是B类继承A')
    
    
    
    class C(B):
        def __init__(self):
            print('我是C类继承B')
    
    >>> issubclass(C,A)
    True
    >>> issubclass(C,B)
    True
    >>> issubclass(A,A)
    True
    >>> issubclass(A,object)#所有类的父类都是object
    True
    >>> issubclass(A,C)
    False
    >>> issubclass(C,(A,B))
    True
    >>> 

    2、判断一个对象是否属于该类

    isinstance(object,classinfo)

    注意:1、如果第一个参数不是对象则永远返回False

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

    class A:
        def __init__(self):
            print('我是A类')
    
    
    class B(A):
        def __init__(self):
            print('我是B类继承A')
    
    
    
    class C:
        def __init__(self):
            print('我是C类')
    >>> a=A() 我是A类
    >>> isinstance(a,A) True >>> isinstance(a,(C,A)) True >>> isinstance(B,(C,A)) False >>> isinstance(B,a) Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> isinstance(B,a) TypeError: isinstance() arg 2 must be a type or tuple of types

    3、判断对象是否存在某种属性

    hasattr(object,name)

    注意:name要用单引号‘’括起来

    class A:
        size=10
        def __init__(self):
            print('我是A类')
    
    
    >>> hasattr(A,'size')
    True

    4、获取对象的属性

    getattr(object,name,default)

    注意:当对象无该属性时如果default没赋值则会报错,如果赋值则返回default的值

    class A:
        size=10
        def __init__(self):
            print('我是A类')
    >>> getattr(A,'lenth','不存在该属性')
    '不存在该属性'

    5、新建对象属性和删除属性的方法

    新建

    1、直接对象.属性 新建属性

    2.setattr(object,name,value)#name加单引号

    删除

    delattr(类对象,name)

    对类对象的属性的删除会影响到由该类所产生的实例对象,而不能用delattr(实例对象,name)来删除属性

    class A:
        size=10
        def __init__(self):
            print('我是A类')
    
    >>> a=A()
    我是A类
    >>> a.size
    10
    >>> a.y=1
    >>> a.y
    1
    >>> a.size
    10
    >>> A.y
    Traceback (most recent call last):
      File "<pyshell#82>", line 1, in <module>
        A.y
    AttributeError: type object 'A' has no attribute 'y'
    >>> A.U=0
    >>> a.U
    0
    >>> delattr(A,'U')
    >>> a.U
    Traceback (most recent call last):
      File "<pyshell#88>", line 1, in <module>
        a.U
    AttributeError: 'A' object has no attribute 'U'

    6、property

    引用小甲鱼:http://bbs.fishc.com/thread-51106-1-1.html

    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.x
    10
    >>> c.x = 12
    >>> c.x
    12
    #使用函数修饰符
    class C:
        def __init__(self, size=10):
            self.size = size
            
        @property
        def x(self):
            return self.size
    
        @x.setter
        def x(self, value):
            self.size = value
    
        @x.deleter
        def x(self):
            del self.size

    7、函数修饰符

    http://bbs.fishc.com/thread-51109-1-1.html

  • 相关阅读:
    FZU 2098 刻苦的小芳(卡特兰数,动态规划)
    卡特兰数总结
    FZU 1064 教授的测试(卡特兰数,递归)
    HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8424466.html
Copyright © 2011-2022 走看看