• 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的子类

  • 相关阅读:
    Activity中Intent的知识
    详解 Android 的 Activity 组件
    Android xml资源文件中@的含义
    为App签名的其他方法
    如何将Android程序打包成apk文件
    创建Android虚拟设备(AVD)
    Android开发环境搭建
    论适应和麻木
    一些有趣的图片
    python 写一个scheme 解释器 (二)——简单求值器内核
  • 原文地址:https://www.cnblogs.com/Forever77/p/10093605.html
Copyright © 2020-2023  润新知