反射

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

 

getattr(命名空间,'key')  == 命名空间.key

所有的a.b都可以被反射成getattr(a,'b')

class Person:
    role = '人类'
    Country = '中国'

attr = input('>>>')  
if hasattr(Person,attr):
    print(getattr(Person,attr))

反射类中的方法

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

类\对象\模块 实际上都是有自己的命名空间,从这个命名空间中获取某个值或者函数...名字
如果这个名字字符串数据类型
值 = 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(对象)

 

class A:
    def __init__(self,name,age):
        self.name = name
        self.age = age

a = A('alex',83)
# hasattr
# print(getattr(a,'name'))
# a.sex = '不详'           # setattr(a,'sex','不详')
# print(a.sex)
# del a.age                # delattr(a,'age')
print(a.__dict__)

 

posted @ 2019-02-07 02:29  小萍瓶盖儿  阅读(144)  评论(0编辑  收藏  举报