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("狗粮")
    

      

     
  • 相关阅读:

    k
    通过类名调用类方法
    类Area的getArea方法是一个重载方法
    构造cry
    两个lader对象共享bottom
    向一个方法的基本数据类型参数传值
    Circle
    常量的用法
    显示本机时间
  • 原文地址:https://www.cnblogs.com/bert227/p/9786803.html
Copyright © 2011-2022 走看看