Issue
Is it possible to refactor multiinheritance without dummy classes? Maybe anybody have similar issue or have experienxe to tackle it, or at least tell me which way to look??
Code from __init__.py
from configuration.global_vars import IS_JENKINS_JOB, IS_TEST, IS_DOCKER, IS_TLF
from .base_runner import BaseRunner
from .base_runner_DOCKER import BaseRunnerDOCKER
from .base_runner_JENKINS import BaseRunnerJENKINS
from .base_runner_PROD import BaseRunnerPROD
from .base_runner_TEST import BaseRunnerTEST
from .base_runner_TLF import BaseRunnerTLF
class Dummy1:
pass
class Dummy2:
pass
class Dummy3:
pass
class CombinedBase(
BaseRunnerJENKINS if IS_JENKINS_JOB else Dummy1,
BaseRunnerDOCKER if IS_DOCKER else Dummy2,
BaseRunnerTLF if IS_TLF else Dummy3,
BaseRunnerTEST if IS_TEST else BaseRunnerPROD,
BaseRunner):
pass
Solution
It is relatively easy to create a type dynamically in python.
For example:
# you can use whatever logic to dynamically create the list of bases
base_classes = [
BaseRunnerJENKINS,
BaseRunnerTLF,
BaseRunner
]
# if you need to add custom methods to your new class:
class MyCustomClass:
def method(self, *args):
pass
# Create CombinedBase, inheriting from the MyCustomClass and the dynamic list.
CombinedBase = type('CombinedBase', (MyCustomClass, *base_classes), {})
print(CombinedBase.__bases__)
# (__main__.MyCustomClass, __main__.BaseRunnerJENKINS, __main__.BaseRunnerTLF, __main__.BaseRunner)
Answered By - Rodrigo Rodrigues Answer Checked By - Willingham (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.