首页 > 解决方案 > 在 python 2.7 中使用 __init_subclass__ 的替代方法

问题描述

1- BaseClass.py--->

class BaseClass:

    request_mapper = {}
    def __init_subclass__(cls, data_validation_case_name=None, **kwargs):
        #super().__init_subclass__(**kwargs)
        if data_validation_case_name is None:
            data_validation_case_name = cls.__name__
            print("data_validation_case_name=[{}]".format(data_validation_case_name))
        print("Type of cls is =[{}]".format(type(cls)))
        cls.request_mapper[data_validation_case_name] = cls

    @classmethod
    def get_class_for_data_validation_case_name(cls, data_validation_case_name):
        if data_validation_case_name in cls.request_mapper:
            return cls.request_mapper[data_validation_case_name]
        else:
            raise NotImplementedError

2 ChildClass.py----->

from BaseClass import BaseClass

class count_check(BaseClass):
    @classmethod
    def execute(cls,self):
        print('count_check_execute')
        return

class duplicate_check(BaseClass):
    def execute(self):
        print('duplicate_check_execute')
        return

3- call_main.py--->

import BaseClass
from ChildClass import *

list_of_cases=['count_check','duplicate_check']

if __name__ == "__main__":

   for validation_case_name in list_of_cases:
      child_validation_class = BaseClass.get_class_for_data_validation_case_name(validation_case_name)
      child_validation_class.execute(child_validation_class)

4- __init__.py--->

我有四个文件作为一个包,我正在运行 call_main.py。当我使用 python 3.7 运行它时,它给了我一个输出,但没有使用 python 2.7,因为__init_subclass__()python 2 不支持它。

有没有另一种方法可以在 python 2 中做类似的事情

标签: pythonpython-3.xpython-2.7

解决方案


推荐阅读