首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python依赖注入还是组合?

Python依赖注入还是组合?
EN

Stack Overflow用户
提问于 2022-06-16 00:22:45
回答 1查看 85关注 0票数 0

我正在学习python,只想面对相同代码的两个版本,并询问哪种方法更好。基本上,我有一个声誉等级,应该绑定到每个战士对象。我的直觉告诉我,在初始化Warrior对象的过程中,简单地创建声誉实例是最容易的。另一方面,它反对依赖注入。如有任何反馈,我将不胜感激。

代码语言:javascript
复制
class Reputation:
    def __init__(self, reputation):
        self._reputation = reputation

    def rank(self):
        if self._reputation >= 10: return "basic"
        if self._reputation >= 20: return "mid"
        if self._reputation >= 30: return "advanced"

    def set(self, value):
         if value < 0:
            raise ValueError("Negative")
         self._reputation = value

    def get(self):
        return self._reputation

作文

代码语言:javascript
复制
class Warrior:
    def __init__(self, name: str, reputation: int = 0):
        self.name = name
        self._reputation = Reputation(reputation)

    @property
    def rank(self):
        return self._reputation.rank()

    @property
    def reputation(self):
        return self._reputation.get()

    @reputation.setter
    def reputation(self, value):
        self._reputation.set(value)

def main():
    warrior = Warrior("muah")
    warrior.reputation += 10
    print(warrior.rank)
    -- basic

或依赖注入:

代码语言:javascript
复制
class Warrior:
    def __init__(self, name: str, reputation: Reputation):
        self.name = name
        self._reputation = reputation

    @property
    def rank(self):
        return self._reputation.rank()

    @property
    def reputation(self):
        return self._reputation.get()

    @reputation.setter
    def reputation(self, value):
        self._reputation.set(value)

def main():
    warrior_reputation = Reputation(reputation=11)
    warrior = Warrior("muah", reputation=warrior_reputation)
    warrior.reputation += 10
    print(warrior.rank)
    -- mid
EN

回答 1

Stack Overflow用户

发布于 2022-10-15 18:25:10

从我的观点来看,使用依赖注入总是比使用组合更好,使用DI的方式将类与声誉解耦,并更好地进行测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72639156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档