Python3之反射基础知识

反射:通过字符串的形式导入模块。通过字符串的形式去模块中找到指定函数并执行


#!/usr/bin/env python3
# -*- encoding:utf-8 -*-


i = input('请输入模块名:')


cc = __import__(i)          # __import__可以通过输入的字符串来导入模块;等同于import com as cc


print(cc.f1())


#!/usr/bin/env python3
# -*- encoding:utf-8 -*-

# getattr可以在指定模块中以字符串形式找函数名

i = input('请输入模块名:')

cc = __import__(i)          # 通过输入的字符串来导入模块

de = input('请输入函数名:')

ff = getattr(cc, de)        # 在导入的模块中输入指定的函数名做成新函数对象

print(ff())         # 执行反射过来的函数


ff = getattr(cc, de, None)      # 如果模块中不存在输入的函数,可以指定默认值,返回None
ret1 = hasattr(cc, 'f3')        # 指定模块中以字符串形式判断某对象是否存在

print(ret1)

setattr(cc, 'ha', 'he')       # setattr可以为指定模块在内存中添加一个对象,也可以添加lambda函数对象

ret2 = hasattr(cc, 'ha')

print(ret2)
delattr(cc, 'name')             # delattr在内存中删除模块的某个对象
ret1 = hasattr(cc, 'name')        
print(ret1)

cc = __import__('lib.test.com', fromlist=True)    # 通过fromlist参数可以递归的往目录里找模块


类的反射特点

         类,只能找类里的成员

class Foo:

    def __init__(self, name):
        self.name = name

    def show(self):
        print('show')


obj = Foo('liujun')
print(hasattr(Foo, 'show'))       # True
          对象,即可以找对象,也可以找类里面成员

class Foo:

    def __init__(self, name):
        self.name = name

    def show(self):
        print('show')


# obj = Foo('liujun')
# print(hasattr(Foo, 'show'))       # True
# print(hasattr(Foo, 'name'))        # False

obj = Foo('liujun')
print(hasattr(obj, 'name'))      # True
print(hasattr(obj, 'show'))        # True








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值