簡體   English   中英

如何在多個 inheritance 條件下避免虛擬類

[英]How to avoid dummy clases during multiple inheritance with conditions

是否可以在沒有虛擬類的情況下重構多重繼承? 也許任何人都有類似的問題或有經驗來解決它,或者至少告訴我看哪種方式?

來自__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

python中動態創建類型相對容易。

例如:

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM