python中动态获取子类

python中动态获取子类,第1张

概述当父类和子类都在一个文件下时,直接在父类中调用__subclassess__就可以获得所有子类,如:classA(object):passclassB(A):passclassC(A):passforsubinA.__subclasses__():print(sub.__name__) 但是当子类和父类不在一个文件下时就会获取

当父类和子类都在一个文件下时,直接在父类中调用 __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中动态获取子类全部内容,希望文章能够帮你解决python中动态获取子类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1186330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存