面向对象进阶-反射

#什么叫反射
#通过字符串数据类型的变量名来访问变量的值

# 几种反射应用场景:
#类名反射静态属性
#类名反射对象属性和方法
#模块反射模块中的名字
#反射自己所在文件中的名字

#x.y 这样的形式都可以用反射

#Part01

# print('aaa'.startswith)
#反射模式转换:getattr
# ret=getattr('aaa','startswith')
# print(ret)
# print(ret('a'))

# class Person:
# role='Person'
# def __init__(self,name):
# self.name=name
# def eat(self):
# print('eating')
# def sleep(self):
# print('sleeping')
# alex=Person('alex')
# print(getattr(alex,'name'))
# print(getattr(alex,'role'))
# while True:
# str=input('输入方法名')
# if hasattr(alex,str):
# getattr(alex,str)()

#首先使用getattr获取一个名字,如果这个对象的命名空间没有这个名字,会报错
#使用hasattr 判断时候存在反射
#getattr(obj,func),都等于obj.func拿到的是一个地址,需要加obj.func()才会执行
#getattr获取属相,直接获取

#Part02 模块反射模块中的名字

# import my_module
# my_module.func1()
#
# getattr(my_module,'func1')()
# print(getattr(my_module,'money'))
# Manager=getattr(my_module,'Manager')
# a=Manager()
# getattr(a,'eat')()

#Part03 #反射自己所在文件中的名字
value=100
import sys
#获取自己的模块
# print(sys.modules['__main__'])
print(getattr(sys.modules['__main__'],'value'))

posted @ 2018-05-23 18:27  非非不可  阅读(102)  评论(0编辑  收藏  举报