• 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

  • 相关阅读:
    图论1 Tarjan算法
    codevs1380 没有上司的舞会
    阿牛的EOF牛肉串
    codevs1105 过河
    HDU5340 Three Palindromes
    AndroidStudio中安装GsonFormat插件并根据json文件生成JavaBean
    Android中五种常用对话框的使用
    AndroidStudio中更新到最新版本后仍然提示:This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot o
    AndroidStudio中下载某版本gradle速度慢,从哪里高速下载指定版本gradle
    若依微服务版怎样修改Nacos中配置文件使Url不受权限认证跳过Token验证
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8424466.html
Copyright © 2020-2023  润新知