python_反射——根据字符串获取模块中的属性

1.获取当前模块中的属性

class Person(object):

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

p = Person('wdc',22)

import sys
q = sys.modules[__name__]   #获取模块本身,并赋值给q
if hasattr(q,'p'):  #查看当前模块下是否有名字叫“p”的属性
    print(getattr(q,'p'))   #获取当前模块的名字叫“p”的属性
print(p)    #打印p和上面做比较

 

 

 打印输出后发现通过字符串获取的,和直接打印的模块相同。

 

 

2.从其他模块导入方法

  test_mod.py

def hi():
    print('Hi')

  test.py

import test_mod #导入其他模块
if hasattr(test_mod, 'hi'):  #判断test_mod模块是否有名字为“hi”的方法
    f = getattr(test_mod, 'hi')  #获去test_mod模块中名字叫“hi”的方法并赋值给f
    f() #执行获取的方法

    setattr(test_mod,'name','wdc')  #为方法添加名字为“name”的属性,并赋值为“wdc”
    print(test_mod.name)    #打印输出为模块添加的属性

 

 

posted @ 2019-12-07 17:04  手可摘星辰。  阅读(919)  评论(0编辑  收藏  举报