首页 > 编程语言 > 详细

python中动态获取子类

时间:2021-05-15 19:28:51      阅读:28      评论:0      收藏:0      [点我收藏+]

当父类和子类都在一个文件下时,直接在父类中调用 __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

 

python中动态获取子类

原文:https://www.cnblogs.com/yeteng/p/14771228.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!