zoukankan      html  css  js  c++  java
  • Python3 反射及常用的方法

    反射就是通过字符串映射或修改程序运行时的状态、属性、方法

    有四个常用方法:

     hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法

    getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址

    setattr(obj,key,value) 为对象Obj新增或修改属性或者方法

    delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法

    反射Demo举例:
    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    # Author:CarsonLi、
    '''
    hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
    getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
    setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
    delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
    '''
    def bulk(self):
        print("%s is yelling"%self.name)
    
    class Dog(object):
        def __init__(self,name):
            self.name=name
    
        def eat(self,food):
            print("%s is eating %s"%(self.name,food))
    
    jim=Dog("Jim")
    choise=input(">>输入需要执行的操作:").strip()
    if hasattr(jim,choise):
        func=getattr(jim,choise)
        func("巧克力")
        #delattr(jim,choise)
    else:
        #动态装配一个方法 choise为方法名,bulk为方法的内存地址
        setattr(jim,choise,bulk)
        # 调用时用转配的方法名,即传入的choise值,这里需要传入对象本身
        getattr(jim,choise)(jim)
        #动态装配一个属性,也可以修改属性
        setattr(jim,choise,"新装配的属性")
        print(getattr(jim,choise))
    #print(jim.name)
    #jim.eat("狗粮")
    

      

     
  • 相关阅读:
    vue-cli 2.x 项目优化之:引入本地静态库文件
    关联本地文件夹到 GitLab 项目
    react 子组件访问父组件的方法
    vue 和 react 组件间通信方法对比
    mobx-state-tree 知识点
    vue 下实现 echarts 全国到省份的地图下钻
    TweenMax 动画库,知识点
    mobx 知识点
    highcharts 知识点
    dependencies、devDependencies、webpack打包 的区别与联系
  • 原文地址:https://www.cnblogs.com/bert227/p/9786803.html
Copyright © 2011-2022 走看看