zoukankan      html  css  js  c++  java
  • 反射

    1.什么是反射

    现有一个字符串,你希望能够将这个字符串转成变量名,这个变量名可以是(类名函数名变量名方法名对象名),

    反射: 某个命名空间中的某个"变量名",获取这个变量名对应的值

    class Manager:pass
    class Student:pass
    class Teacher:pass
    identify = 'Student'
    print(eval(identify)()) #这样就可以执行实例化了,但是eval不安全

    反射类中的属性

    class Person:
        role = '人类'
        country = '中国'
    attr = input('>>>')
    if hasattr(Person,attr): #输入正确返回Ture,输入错误返回Fasle
        print(getattr(Person,attr)) #(类名,值)

    反射类中的方法

    class Person:
        role = '人类'
        @staticmethod
        def show_courses():
            print('所有课程')
    ret = getattr(Person,'show_courses')
    print(ret)
    ret(

    a.b 类型
    类名.静态属性/类名.类方法/类名.静态方法
    list
    对象.对象属性/对象.普通方法/对象.类方法/对象.静态方法

    调用属性和方法

    class A:
        def __init__(self,name):
            self.name = name
    
        def eat(self):
            print('%s is eating'%self.name)
    
    wl = A('wanglna')
    if hasattr(wl,'name'):
        print(getattr(wl,'name'))
    if hasattr(wl,'eat'):
        getattr(wl,'eat')()

    通过类名反射

    getattr(类名,'静态属性')
    getattr(类名,'类方法')()
    getattr(类名,'静态方法')

    通过对象名反射

    getattr(对象名,'对象属性')
    getattr(对象名,'普通方法')()
    getattr(对象名,'类方法')()
    getattr(对象名,'静态方法')()

    通过模块反射

    getattr(模块,'全局变量')
    getattr(模块,'函数名')

    反射全局变量的值(反射本文件中的名字)

    from sys import modules
    a = 1
    b = 2
    lst = [1,2,3]
    class Manager:pass
    class Student:pass
    class Teacher:pass
    getattr(modules[__name__],'Student')
    identify = input('>>>').strip()
    # 类 = getattr(modules[__name__],identify)
    # print(类)
    # 对象 = 类()
    # print(对象)
  • 相关阅读:
    这篇文章把短线操作技巧以及交易原则讲透了!
    炒股老手的妙招——卖出在周K线的顶部
    连续多阳低吸买入法需要哪些条件?
    2个实盘案例带你了解南玻量态选庄股法!
    如何通过筹码分布判断一个股票要不要做?
    股票指标公式高手是怎么通过指标变现的?
    股票回踩均线是什么意思?
    定宽不定宽盒子的居中解决办法和外边距塌陷问题
    JS 数据类型
    JS 事件总结
  • 原文地址:https://www.cnblogs.com/wanglan/p/10022773.html
Copyright © 2011-2022 走看看