ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Python】getattr() 函数 动态导入模块、类、方法

2022-01-14 17:33:25  阅读:204  来源: 互联网

标签:__ run Python self imp getattr 导入 print


动态导入类属性、类方法

# coding:utf-8
class run:
    # 类属性
    c1 = "class"
    # 函数
    def run_a(self, a):

        return a+1
    # 函数
    def run_b(self, b):

        return b*2

    def __init__(self):
        self.v1 = "123"

if __name__ == "__main__":
   
    x = run()
    
    dynamic = getattr(x, "c1")
    print("类属性:", dynamic)
   
    dyn_runa = getattr(x, "run_a")
    print("类中的函数:",dyn_runa(5))
    print("构造函数中的属性:", getattr(x, "v1"))

    
    dyn_runa = getattr(x, "run_b")
    print("构造函数中的属性:", getattr(x, "run_b")(5))

 

运行结果

 

 

 

不同类中导入类

# coding:utf-8
class run:
    # 类属性
    c1 = 8
    # 函数
    def run_a(self, a, b):

        return a*b
    # 函数
    def run_b(self, b):

        return b/2

    def __init__(self):
        self.v1 = "123"

class imp:
    run = run()
    c1 = getattr(run, "c1")
    # print("导入run类中的属性c1:", c1)

    imp_funa = getattr(run, "run_a")
    print("导入run类中的函数run_a:", imp_funa(100, c1))

    imp_funb = getattr(run, "run_b")
    # print("导入run类中的函数run_b:", imp_funb(100))


if __name__ == "__main__":
    print(imp().imp_funa(100, 20))

 

运行结果

 

 

 

 

# coding:utf-8
class run_casea:
    # 类属性
    c1 = 8
    # 函数
    def run_a(self, a, b):

        return a*b
    # 函数
    def run_b(self, b):

        return b/2

    def __init__(self):
        self.v1 = "123"

class sameC:
    test_a = run_casea()
    test = getattr(test_a, "run_a")

if __name__ == "__main__":

    print(sameC().test(5, 6))
run_casea.py

 

跨文件导入类

run_caseb.py

# coding:utf-8
import importlib

class run_caseb:
    bala = "balabalabala"

    def fun_a(self):
        return True

    def fun_i(self,):
        name = "a"
        case_name = "casea"
        # 导入run_case1 模块中run类
        imp_class = getattr(importlib.import_module("deploy.a.run_%s" % case_name), "run_%s" % case_name)
        # 导入run_case1 模块中run类中的属性c1
        attr = imp_class.c1
        print("c1 属性:", attr)
        # 导入run_case1 模块中run类中的方法run_a
        imp_fun = getattr(imp_class, "run_%s" % name)(self, 3, 4)
        return imp_fun


if __name__ == "__main__":
    print(run_caseb().fun_a())
    print(run_caseb().fun_i())
# coding:utf-8
import importlib

class run_caseb:
    bala = "balabalabala"

    def fun_a(self):
        return True

    def fun_i(self,):
        name = "a"
        case_name = "casea"
        # 导入run_case1 模块中run类
        imp_class = getattr(importlib.import_module("deploy.a.run_%s" % case_name), "run_%s" % case_name)
        # 创建对象
        exp = imp_class()
        print(exp.v1)
        print(exp.c1)
        # 导入方法
        imp_fun = getattr(exp, "run_a")(3, 4)
      
        return imp_fun


if __name__ == "__main__":
    print(run_caseb().fun_a())
    print(run_caseb().fun_i())
方法二

 

运行结果

 

标签:__,run,Python,self,imp,getattr,导入,print
来源: https://www.cnblogs.com/phoenixy/p/15802370.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有