面向对象进阶-反射

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

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

#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'))

转载于:https://www.cnblogs.com/lixiaoxuan/articles/9078619.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值