问题,在python 3.7中构建开关盒

时间:2019-02-28 14:45:46

标签: python python-3.x

我正在尝试在python 3.7中开发类似开关箱功能的功能,例如从其他语言中了解到的功能。

为此,我在这里使用了本教程:https://jaxenter.com/implement-switch-case-statement-python-138315.html

并以以下代码开头:

class ClassCheckShipping:

    def __init__(self):
        pass

    def __checkAktivweltShipping(self, country):
        return "checkShipping für Aktivwelt"

    def __checkHoerhelferShipping(self, country):
        return "checkShipping für Hörhelfer"

    def checkShipping(self, merchant, country):
        self.country = country
        switcher = {
            "Aktivwelt": __checkAktivweltShipping,
            "Hörhelfer": __checkHoerhelferShipping
        }
        func = switcher.get(merchant, lambda: "unbekannter Merchant")
        print(func())

不幸的是,我收到以下错误,但找不到我的错误。

  

文件“ M:\ Python-Projekte \ Wipando-Feeds \ CheckShipping.py”,在checkShipping中的第18行       “ Aktivwelt”:__checkAktivweltShipping,   NameError:名称“ _ClassCheckShipping__checkAktivweltShipping”未定义

您能给我一个提示来修复此代码吗?

3 个答案:

答案 0 :(得分:4)

您必须将self添加到switcher中的方法中:

switcher = {
    "Aktivwelt": self.__checkAktivweltShipping,
    "Hörhelfer": self.__checkHoerhelferShipping
}

答案 1 :(得分:3)

您应该输入:pytestself.__checkAktivweltShipping

答案 2 :(得分:1)

另一种解决方案是将switcher定义为类成员(因为它是常量),那么您可以省略使用self.

def __checkAktivweltShipping(self, country):
    return "checkShipping für Aktivwelt"

def __checkHoerhelferShipping(self, country):
    return "checkShipping für Hörhelfer"

__switcher = {
    "Aktivwelt": __checkAktivweltShipping,
    "Hörhelfer": __checkHoerhelferShipping
}

现在也必须使用self来引用它,但是代码更简单(也更快,因为python不必在每次调用时都重新构建字典,创建类时只执行一次)

def checkShipping(self, merchant, country):
    self.country = country
    func = self.__switcher.get(merchant, lambda: "unbekannter Merchant")
    print(func())