zoukankan      html  css  js  c++  java
  • python中动态获取子类

    当父类和子类都在一个文件下时,直接在父类中调用 __subclassess__就可以获得所有子类,如:

    class A(object):
        pass
     
    class B(A):
        pass
     
    class C(A):
        pass
     
     
    for sub in A.__subclasses__():
        print(sub.__name__)

    但是当子类和父类不在一个文件下时就会获取不到, 就需要通过动态导包来实现,我这里是父类和子类在同一个目录下,如果目录不同,则自己调整路径就行,代码参考:class A(object):

        @classmethod
        def get_sub(cls):
            """动态获取继承的子类"""        
    rel_path = os.path.relpath(__file__) # 相对路径,可能项目的根目录会有 .., eg: '..\..\hdyplus\app\services\service_utils\new\api_parse.py' package, file_name = os.path.split(rel_path) package_list = [str(i) for i in package.split(os.path.sep) if i != '..'] package = '.'.join(package_list) current_path = os.path.dirname(os.path.abspath(__file__)) current_files = [f.split('.')[0] for f in os.listdir(current_path) if isfile(join(current_path, f))] for f in current_files: try: module = importlib.import_module('.%s' % f, package=package) for name, sub in inspect.getmembers(module): if inspect.isclass(sub): # 类别是class,并且父类是A if sub_class.__base__ == cls: print(sub.__name__)
    except Exception as e:
    pass
  • 相关阅读:
    编写属于自己的Linux Service命令
    Cloudera Manager和CDH4.1的安装
    html5基础教程收集整理精华
    Javascript跳转页面和打开新窗口等方法
    VK值列表
    标准C++之fstream
    PeekMessage用法
    Web系统常用测试方法
    VC控件的一些原理
    Visual C++ 文件操作
  • 原文地址:https://www.cnblogs.com/yeteng/p/14771228.html
Copyright © 2011-2022 走看看