• python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)


    主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数。

    hasattr(object,name) 判断object中是否有name字符串对应的属性或方法,返回True或False

    getattr(object,name[,defaultreturn])获取object中name字符串对应属性的值,没有这个属性的话会报错,defaultreturn表示如果没有对应的属性返回默认的设定值而不会报错

    setattr(object,key,value)表示修改object中key对应的属性的值为value,object中存在key属性则修改它的值,不存在则增加这个属性。

    delattr(object,key) 删除object中key对应的属性

    class cat:
        living='earth'
        def __init__(self,name,leg,tail):
            self.name = name
            self.leg = leg
            self.tail = tail
        def eat(self,food):
            print('%s likes to eat %s'%(self.name,food))
    cat1=cat('cat1',4,1)
    print(hasattr(cat1,'leg'),hasattr(cat1,'eat_food'))
    print(getattr(cat1,'tail'),getattr(cat,'eat_food','none searching attribute'))
    setattr(cat1,'leg',3)
    setattr(cat1,'func',lambda x:x+3)
    print(cat1.__dict__)
    delattr(cat1,'func')
    print(cat1.__dict__)
    
    # 输出如下:
    # True False
    # 1 none searching attribute
    # {'name': 'cat1', 'leg': 3, 'tail': 1, 'func': <function <lambda> at 0x0000029D0341A6A8>}
    # {'name': 'cat1', 'leg': 3, 'tail': 1}

    类的内置属性__getattr()__、__setattr()__与__delattr()__

    获取的属性不存在时,会触发类的内置__getattr()__方法(获取属性时,属性存在会触发__getattribute()__方法,不存在则__getattribute()__抛出AttributeError异常,并触发__getattr()__方法)

    给实例或者类增加或修改属性时、或者执行delattr(),会触发类的内置__setattr()__方法

    删除属性、或者执行delattr()时,会触发类的内置__delattr()__方法

    内置属性__getitem()__、__setitem()__与__delitem()__,意义与上面的attr类似

    不同之处在于,通过实例.属性时触发的是attr,通过实例[属性]时触发的是item

    isinstance(obj,cls) 判断obj是否是cls的对象,如果B是A的子类,C是B的实例,那么c也是A的对象

    issubclass(sub,super)判断sub是否是super的子类,如果B是A的子类,C是B的子类,那么C也是A的子类

  • 相关阅读:
    oracle-查询执行速度慢的sql
    oracle 锁表的处理。
    linux视频学习7(ssh, linux启动过程分析,加解压缩,java网络编程)
    【转】soapUI和Jmeter的接口测试结构区别
    什么是探索性测试?
    loadrunner动态从mysql取值 [需要下载跟数据库服务器一致的dll,32位或64位]
    myeclipse中disable maven nature怎么恢复
    Eclipse+Maven创建webapp项目<一>
    Loadrunner
    自动化测试,基于selenium/appnium 学习
  • 原文地址:https://www.cnblogs.com/Forever77/p/10093605.html
Copyright © 2020-2023  润新知