zoukankan      html  css  js  c++  java
  • 反射

    反射(*****)

      重点:v = getattr(obj , “func”)  # 根据字符串为参数(第二个参数),去对象(第一个参数)中寻找与之同名的成员。

    应用一、首先定义一个handler模块,handler.py文件内容如下:

    模块:

    def chi():
        print("大牛一顿吃100碗饭")
    
    def he():
        print("大牛一顿喝一桶")
    
    def la():
        print("大牛很能拉")
    
    def shui():
        print("大牛一次睡一年")
    
    name = "大牛"
    master.py

    test.py

    引入 import master

    盖特 getattr()    从xxx对象或者模块中找xxxxx(字符串) 功能, 变量

    孩子  hasattr()   判断第二个是否在第一个里面

    while 1:
        print("""大牛写了很多的功能:
        chi
        he
        la
        shui
    """)
        val = input("请输入你要测试的功能") # he
    
        if hasattr(master, val):
            attr = getattr(master, val) # 从xxx对象或者模块中找xxxxx(字符串) 功能, 变量
            if callable(attr): # 判断这个鬼东西是否可以被调用
                attr()
            else:
                print(attr)
        else:
            print("没有这个功能")
    

      

    # 把chi函数换成lambda
    # print(master.chi)
    # setattr(master, "chi", lambda x: x + 1)
    # print(master.chi)
    
    delattr(master, "la") # 删除xxx
    master.la()
    

      

    盖特 getattr()    从xxx对象或者模块中找xxxxx(字符串) 功能, 变量

    孩子  hasattr()   判断第二个是否在第一个里面

    面向对象的反射:

    class Person:
        def __init__(self, name):
            self.name = name
            self.age = None
    
        def chi(self):
            print("人喜欢吃东西%s" % self.name)
    
    p = Person("刘伟")
    val = input("请输入你想让刘伟执行的动作:")
    if hasattr(p, val):
        getattr(p, "name")
        func = getattr(p, val)
        func()
    

      setattr

    setattr(p, "name", "大阳哥") # 动态的给对象设置属性和值
    setattr(p, "age", 18) # 很少用. 慎用
    

      delattr   删除

    delattr(p, "age")
    

      

    反射就是,先定好我要执行什么功能,然后去你里面找

    总结:

      getattr   # 根据字符串的形式,去对象中找成员;

      hasattr   # 根据字符串的形式,去判断对象中是否有成员;

      setattr   # 根据字符串的形式,动态的设置一个成员(内存);

      delattr   # 根据字符串的形式,动态的删除一个成员(内存);

  • 相关阅读:
    建造者模式
    模板方法模式
    抽象工厂模式
    工厂方法模式
    Josephus环问题
    单例模式
    求两个数的最大公约数
    Nginx的安装与部署
    左京大夫显辅
    java 调用第三方系统时的连接代码-记录
  • 原文地址:https://www.cnblogs.com/xihuanniya/p/9750623.html
Copyright © 2011-2022 走看看